새벽을 밝히는 붉은 달

[C] 백준 1259번: 수 뒤집기! 본문

Online Judge

[C] 백준 1259번: 수 뒤집기!

자윰 2020. 9. 14. 02:47

📎 백준 1259번 풀러 가기

 

1259번: 팰린드롬수

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

www.acmicpc.net

문제

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

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

입력

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

출력

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


오늘은 쉬어가는 타임으로 쉬운 문제 하나 풀기로 했다.

 

뭔가 이전에 비슷하게 문자로 풀어본 기억이 있다.

이번에는 숫자다!

 

처음에는 숫자를 문자배열로 받아서 처음이랑 뒤랑 같은지 비교할까 생각을 하다가,

예전에 숫자를 %와 /로 한 자리씩 쪼갰던걸 써보기로 했다.

 

그래서 작성한게 바로 아래의 reverse함수.


아래는 내가 구현한 코드👇

#include <stdio.h>

int reverse(int num) {
    int reverse = 0;
    while (num != 0) {
        reverse = reverse * 10 + num % 10;
        num /= 10;
    }
    return reverse;
}

int main(void)
{
    int num;
    scanf("%d", &num);
    while (num) {
        int temp = reverse(num);
        if (temp == num) printf("yes\n");
        else printf("no\n");
        scanf("%d", &num);
    }
    return 0;
}

 

Comments