문제링크
https://www.acmicpc.net/problem/1259
문제
어떤 단어를 뒤에서부터 읽어도 똑같다면 그 단어를 팰린드롬이라고 한다. 'radar', 'sees'는 팰린드롬이다.
수도 팰린드롬으로 취급할 수 있다. 수의 숫자들을 뒤에서부터 읽어도 같다면 그 수는 팰린드롬수다. 121, 12421 등은 팰린드롬수다. 123, 1231은 뒤에서부터 읽으면 다르므로 팰린드롬수가 아니다. 또한 10도 팰린드롬수가 아닌데, 앞에 무의미한 0이 올 수 있다면 010이 되어 팰린드롬수로 취급할 수도 있지만, 특별히 이번 문제에서는 무의미한 0이 앞에 올 수 없다고 하자.
입력
입력은 여러 개의 테스트 케이스로 이루어져 있으며, 각 줄마다 1 이상 99999 이하의 정수가 주어진다. 입력의 마지막 줄에는 0이 주어지며, 이 줄은 문제에 포함되지 않는다.
출력
각 줄마다 주어진 수가 팰린드롬수면 'yes', 아니면 'no'를 출력한다.
해석
1 : 수가 만의자리까지 밖에 안되기 때문에 만의자리일 때, 천의자리일 때, 백의자리일 때, 십의자리일 때, 일의자리일 때 각 자리의 수를 구하고 직접 같은지 다른지 판단하는 방법을 사용했다.
2 : string으로 받아서 절반을 나누고 앞과 뒤를 비교한다. 이 때 홀수자리수면 가운데 수는 뒤집어도 똑같기 때문에 고려하지 않아도 된다.
코드1
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
#include <iostream>
using namespace std;
void palindrome(int n) {
int one, two, three, four, five;
if (n >= 10000) {
five = n / 10000;
n = n - five * 10000;
four = n / 1000;
n = n - four * 1000;
three = n / 100;
n = n - three * 100;
two = n / 10;
n = n - two * 10;
one = n;
if (five == one && two == four) {
cout << "yes" << '\n';
}
else {
cout << "no" << '\n';
}
}
else if (n >= 1000) {
four = n / 1000;
n = n - four * 1000;
three = n / 100;
n = n - three * 100;
two = n / 10;
n = n - two * 10;
one = n;
if (four == one && two == three) {
cout << "yes" << '\n';
}
else {
cout << "no" << '\n';
}
}
else if (n >= 100) {
three = n / 100;
n = n - three * 100;
two = n / 10;
n = n - two * 10;
one = n;
if (three == one) {
cout << "yes" << '\n';
}
else {
cout << "no" << '\n';
}
}
else if (n >= 10) {
two = n / 10;
n = n - two * 10;
one = n;
if (one == two) {
cout << "yes" << '\n';
}
else {
cout << "no" << '\n';
}
}
else {
cout << "yes" << '\n';
}
}
int main() {
while (true) {
int n;
cin >> n;
if (n == 0) {
return 0;
}
palindrome(n);
}
}
|
cs |
코드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
|
#include <iostream>
#include <string>
using namespace std;
void palindrome(string n) {
int size = n.size();
for (int i = 0; i < size / 2; i++) {
if (n[i] == n[size - i - 1]) {
continue;
}
else {
cout << "no" << '\n';
return;
}
}
cout << "yes" << '\n';
}
int main() {
while (true) {
string n;
cin >> n;
if (n == "0") {
return 0;
}
palindrome(n);
}
}
|
cs |
Memo
처음 생각난 풀이는 닥치는대로 풀어서 코드가 길어졌다. 그래서 다른 방법을 생각해봐서 풀어봤다.
string으로도 풀 수 있고, int로도 풀 수 있어서 재밌었던 문제였다.