팰린드롬수 

 

시간 제한         메모리 제한                   제출                          정답                        맞힌 사람                정답 비율

   

1 초 128 MB 59454 33787 29795 57.112%

문제

어떤 단어를 뒤에서부터 읽어도 똑같다면 그 단어를 팰린드롬이라고 한다. 'radar', 'sees'는 팰린드롬이다.

수도 팰린드롬으로 취급할 수 있다. 수의 숫자들을 뒤에서부터 읽어도 같다면 그 수는 팰린드롬수다. 121, 12421 등은 팰린드롬수다. 123, 1231은 뒤에서부터 읽으면 다르므로 팰린드롬수가 아니다. 또한 10도 팰린드롬수가 아닌데, 앞에 무의미한 0이 올 수 있다면 010이 되어 팰린드롬수로 취급할 수도 있지만, 특별히 이번 문제에서는 무의미한 0이 앞에 올 수 없다고 하자.

입력

입력은 여러 개의 테스트 케이스로 이루어져 있으며, 각 줄마다 1 이상 99999 이하의 정수가 주어진다. 입력의 마지막 줄에는 0이 주어지며, 이 줄은 문제에 포함되지 않는다.

출력

각 줄마다 주어진 수가 팰린드롬수면 'yes', 아니면 'no'를 출력한다.

예제 입력 1 복사

121
1231
12421
0

예제 출력 1 복사

yes
no
yes
 
 
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int is_palindrome(char* str, int len) {
	int middle = len / 2; //index of middle array
	if (len % 2 != 0) { //for odd
		for (int i = 0; i < middle; i++) {
			if (str[i] != str[(len - 1) - i]) {
				return 0;
			}
		}
		return 1;
	}
	else { // for even
		middle--;
		for (int i = 0; i <= middle ; i++) {
			if (str[i] != str[(len-1) - i]) {
				return 0;
			}
		}
		return 1;
	}
	
}

int main(int argc, char* argv[]) {
	char user_input[6] = {0,}; //max number length is 5
	int array_size, middle;

	while (1) {
		scanf("%5s", user_input);

		if (user_input[0] == '0')
			return 0;

		array_size = strlen(user_input);

		if (is_palindrome(user_input, array_size))
			printf("yes\n");
		else
			printf("no\n");
	}
	return 0;
}

 

'C, C++ > 백준' 카테고리의 다른 글

[백준] 2231 분해합  (0) 2024.02.22
[백준] 1546 평균  (1) 2024.02.15
[백준] 1436 영화감독 숌  (1) 2024.02.10
[백준] 1002번 터렛  (0) 2023.12.26
[백준] 10828  (0) 2023.11.20

 

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

double calculate_distance(int ax, int ay, int bx, int by) {
    return sqrt(pow((ax - bx), 2) + pow((ay - by), 2));
}

int main(int argc, char* argv[]) {
    int num_test_case = 0;
    double distance_of_centers = 0.0;
    int sum_of_radius = 0, sub_of_radius = 0;
    scanf("%d", &num_test_case);

    int* cases = (int*)malloc(sizeof(int) * 6 * num_test_case);

    for (int i = 0; i < num_test_case; i++) {
        scanf("%d %d %d %d %d %d", &cases[6 * i], &cases[6 * i + 1], &cases[6 * i + 2], &cases[6 * i + 3], &cases[6 * i + 4], &cases[6 * i + 5]);
        if (cases[6 * i] < -10000 || cases[6 * i] > 10000 || cases[6 * i + 1] < -10000 || cases[6 * i + 1] > 10000 || cases[6 * i + 2] < 1 || cases[6 * i + 2] > 10000 || cases[6 * i + 3] < -10000 || cases[6 * i + 3] > 10000 || cases[6 * i + 4] < -10000 || cases[6 * i + 4] > 10000 || cases[6 * i + 5] < 1 || cases[6 * i + 5] > 10000)
        {
            printf("Error");
            return -1;
        }
    }

    for (int i = 0; i < num_test_case; i++) {
        distance_of_centers = calculate_distance(cases[6 * i], cases[6 * i + 1], cases[6 * i + 3], cases[6 * i + 4]);
        sum_of_radius = cases[6 * i + 2] + cases[6 * i + 5];
        sub_of_radius = cases[6 * i + 2] > cases[6 * i + 5] ? cases[6 * i + 2] - cases[6 * i + 5] : cases[6 * i + 5] - cases[6 * i + 2];

        if (distance_of_centers > sum_of_radius) //case 1
            printf("0\n");
        else if ((distance_of_centers == sum_of_radius || distance_of_centers == sub_of_radius) && distance_of_centers != 0)//case 2,6
            printf("1\n");
        else if (distance_of_centers > sub_of_radius && distance_of_centers < sum_of_radius)//case 3
            printf("2\n");
        else if (distance_of_centers < sub_of_radius)//case 4
            printf("0\n");
        else if (distance_of_centers == 0 && sub_of_radius == 0)//case 5
            printf("-1\n");
    }
}

 

'C, C++ > 백준' 카테고리의 다른 글

[백준] 2231 분해합  (0) 2024.02.22
[백준] 1546 평균  (1) 2024.02.15
[백준] 1436 영화감독 숌  (1) 2024.02.10
[백준] 1259 팬린드롬수  (1) 2024.02.10
[백준] 10828  (0) 2023.11.20

1. 직접 호출

void myFunction() {
    // 함수의 내용
}

int main() {
    myFunction(); // 함수 호출
    return 0;
}

 

2. 함수 포인터를 사용한 호출

void myFunction() {
    // 함수의 내용
}

int main() {
    void (*funcPtr)() = myFunction; // 함수 포인터 선언 및 초기화
    funcPtr(); // 함수 포인터를 통한 호출
    return 0;
}

 

3. 배열에 함수 포인터 저장

void functionA() { /*...*/ }
void functionB() { /*...*/ }

int main() {
    void (*funcArray[2])() = {functionA, functionB}; // 함수 포인터 배열
    funcArray[0](); // functionA 호출
    funcArray[1](); // functionB 호출
    return 0;
}

 

4. 콜백 함수

void myCallback(void (*callbackFunc)()) {
    // 콜백 함수 호출
    callbackFunc();
}

void myFunction() {
    // 함수 내용
}

int main() {
    myCallback(myFunction); // 콜백으로 함수 전달 및 실행
    return 0;
}

 

5. 구조체와 함수 포인터

typedef struct {
    void (*function)();
} MyStruct;

void myFunction() {
    // 함수 내용
}

int main() {
    MyStruct s;
    s.function = myFunction; // 구조체 내 함수 포인터 초기화
    s.function(); // 구조체를 통한 함수 호출
    return 0;
}

 

6. 라이브러리 함수와 함수 포인터

#include <dlfcn.h>

int main() {
    void *handle = dlopen("libmylibrary.so", RTLD_LAZY); // 동적 라이브러리 열기
    void (*myFunction)() = (void (*)())dlsym(handle, "myFunction"); // 함수 포인터 얻기
    myFunction(); // 함수 호출
    dlclose(handle); // 라이브러리 닫기
    return 0;
}

'C, C++' 카테고리의 다른 글

메타 프로그래밍  (0) 2024.02.15
'함수 이름'을 인자로 받아 해당 함수를 실행하는 방법들  (0) 2023.11.20
#define _CRT_SECURE_NO_WARNINGS	;
#include <stdio.h>
#include <stdlib.h> //malloc 사용을 위함
#include <string.h> // memset 사용을 위함
 


void clearBuffer() {
	int c;
	while ((c = getchar()) != '\n' && c != EOF) {}
}

int main(int argc, char* argv[])
{
	int reiteration = 0; //반복 횟수
	int arg = NULL; // opcode 인자
	//int result = 0; //fgets 리턴값
	char opcode[17] = { 0 }; //int형의 최대 크기가 10자리 숫자, 공백 1자리, 명령어가 최대 5글자, 스트링 마지막 널값 10 + 1 + 5 + 1= 17
	char input[17] = { 0 };

	scanf("%d", &reiteration);
	if (!(reiteration >= 1 && reiteration <= 10000))
		return 0;
	
	int *arr = (int *)malloc(sizeof(int) * reiteration);
	int index = 0;

	clearBuffer();

	for (int i = 0; i < reiteration; i++) //문자열을 매칭하여 해당하는 함수 실행
	{
		fgets(input, 17, stdin);
		sscanf(input, "%s %d", opcode, &arg);

		
		if (index >= 0) {
			if (strstr(input, "push") != NULL)
				arr[index++] = arg;

			else if (strstr(input, "pop") != NULL)
			{
				if (index != 0)
					printf("%d\n", arr[(index--) - 1]);
				else
					printf("-1\n");
			}
				

			else if (strstr(input, "size") != NULL)
				printf("%d\n",index);

			else if (strstr(input, "empty") != NULL)
				if (index == 0)
					printf("1\n");
				else
					printf("0\n");

			else if (strstr(input, "top") != NULL)
			{
				if (index != 0)
					printf("%d\n", arr[index - 1]);
				else
					printf("-1\n");
			}
				

			else
			{
				printf("opcode Error\n");
				return 0;
			}
		}
		else
			printf("index not valid\n");
		//clearBuffer();
	}
	memset(arr, '0', 17);
	memset(input, '0', 17);

}

'C, C++ > 백준' 카테고리의 다른 글

[백준] 2231 분해합  (0) 2024.02.22
[백준] 1546 평균  (1) 2024.02.15
[백준] 1436 영화감독 숌  (1) 2024.02.10
[백준] 1259 팬린드롬수  (1) 2024.02.10
[백준] 1002번 터렛  (0) 2023.12.26

1. 함수 포인터와 switch 문 사용

#include <stdio.h>
#include <string.h>

// 함수 정의
void functionA() { printf("Function A\n"); }
void functionB() { printf("Function B\n"); }
void functionC() { printf("Function C\n"); }

enum FunctionName { A, B, C, UNKNOWN };

// 함수 이름을 열거형 값으로 변환
enum FunctionName getFunctionName(const char *name) {
    if (strcmp(name, "A") == 0) return A;
    if (strcmp(name, "B") == 0) return B;
    if (strcmp(name, "C") == 0) return C;
    return UNKNOWN;
}

int main() {
    char input[50];
    printf("Enter function name: ");
    scanf("%s", input);

    switch (getFunctionName(input)) {
        case A: functionA(); break;
        case B: functionB(); break;
        case C: functionC(); break;
        default: printf("Unknown function\n");
    }

    return 0;
}

 

 

2. 조건문과 함수 매핑

#include <stdio.h>
#include <string.h>

// 함수 정의
void functionA() { printf("Function A\n"); }
void functionB() { printf("Function B\n"); }

int main() {
    char funcName[50];
    printf("Enter the function name: ");
    scanf("%s", funcName);

    if (strcmp(funcName, "functionA") == 0) {
        functionA();
    } else if (strcmp(funcName, "functionB") == 0) {
        functionB();
    } else {
        printf("Function not found.\n");
    }

    return 0;
}

 

 

3. 함수 포인터와 배열 사용

#include <stdio.h>
#include <stdlib.h>

// 함수 정의
void functionA() { printf("Function A\n"); }
void functionB() { printf("Function B\n"); }
void functionC() { printf("Function C\n"); }

// 함수 포인터 배열
void (*functions[3])() = {functionA, functionB, functionC};

int main() {
    int choice;
    printf("Enter the function index (0-2): ");
    scanf("%d", &choice);

    if (choice >= 0 && choice < 3) {
        (*functions[choice])();
    } else {
        printf("Invalid index.\n");
    }

    return 0;
}

 

 

4. 명령 패턴 사용

#include <stdio.h>
#include <string.h>

typedef struct Command {
    void (*execute)();
} Command;

void functionA() { printf("Function A\n"); }
void functionB() { printf("Function B\n"); }

Command createCommand(void (*func)()) {
    Command cmd;
    cmd.execute = func;
    return cmd;
}

int main() {
    char funcName[50];
    printf("Enter the command name (A/B): ");
    scanf("%s", funcName);

    Command cmd;
    if (strcmp(funcName, "A") == 0) {
        cmd = createCommand(functionA);
    } else if (strcmp(funcName, "B") == 0) {
        cmd = createCommand(functionB);
    } else {
        printf("Invalid command.\n");
        return 1;
    }

    cmd.execute();
    return 0;
}

'C, C++' 카테고리의 다른 글

메타 프로그래밍  (0) 2024.02.15
함수 호출 방법들  (0) 2023.12.24

+ Recent posts