Post

백준 1259번, 팰린드롬수

백준 1259번 c++ 문제풀이


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

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

풀이:

  1. 각 자릿수를 분리해서 1의 자릿수부터 큐에 저장한다.
  2. 큐는 fifo이니 꺼낸 순서대로 자릿수를 증가 시키며 수를 만들어준다.
  3. 처음 입력한 값과 2번 과정에서 만들어진 수가 같다며 팰린드롬 수 인 것을 알 수 있다.

코드:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <iostream>
#include <queue>

using namespace std;
int a[9999];

int main(){

int n;

queue <int> q;

while(1){
    cin >> n;

    int count = 0;

    if(n == 0){
    return 0;
    }else{
    int a = n;
    int b = n;
    while(a > 0){
        b = a%10;
        a = a / 10; 
        q.push(b);  //나며지 q에 push
        count++;  //자리수 구하기
    }
    
    int result = 0;
    for(int i=0;i<count;i++){
        result =10 * result + q.front(); //q에서 pop하는 순서대로 숫자만들기
        q.pop();
    }
    if(result == n){
        cout << "yes\n";
    }
    else{
        cout << "no\n";
    }
    }
}

return 0;
}

감사합니다.

This post is licensed under CC BY 4.0 by the author.