백준 1259번, 팰린드롬수
백준 1259번 c++ 문제풀이
문제: 어떤 단어를 뒤에서부터 읽어도 똑같다면 그 단어를 팰린드롬이라고 한다. ‘radar’, ‘sees’는 팰린드롬이다.
수도 팰린드롬으로 취급할 수 있다. 수의 숫자들을 뒤에서부터 읽어도 같다면 그 수는 팰린드롬수다. 121, 12421 등은 팰린드롬수다. 123, 1231은 뒤에서부터 읽으면 다르므로 팰린드롬수가 아니다. 또한 10도 팰린드롬수가 아닌데, 앞에 무의미한 0이 올 수 있다면 010이 되어 팰린드롬수로 취급할 수도 있지만, 특별히 이번 문제에서는 무의미한 0이 앞에 올 수 없다고 하자.
풀이:
- 각 자릿수를 분리해서 1의 자릿수부터 큐에 저장한다.
- 큐는 fifo이니 꺼낸 순서대로 자릿수를 증가 시키며 수를 만들어준다.
- 처음 입력한 값과 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.