-
C++) 백준 1259번: 팰린드롬수컴퓨터 공학/Problem Solving 2023. 3. 23. 23:34
https://www.acmicpc.net/problem/1259
굉장히 쉬운 문제인데 헛짓거리를 오래 해서 정신차릴 겸 써보려 한다.
< 접근 방식 1 - 성공>
성공했긴 한데 처음에 너무 멍청하게 풀었다.
int형 배열과 char형 배열의 입력값에 혼동이 와서...
예를 들어 123을 입력 받을 경우 int형 배열은 0번째 칸에 123을 입력받는 반면, char형 배열은 0번째 칸에 1, 1번째 칸에 2, 2번째 칸에 3을 입력받는다. char형 배열을 순간 int형 배열로 착각해서 처음에 너무 돌려 풀었다.. 요즘 하루종일 문제만 풀다보니 집중력이 떨어져 이런 일들도 생기는 듯 하다.
어쨌든 처음에 접근한 방식은 한 자릿수일 때 ~ 다섯 자릿수일 때까지 다 따로 계산해서 풀었다. 입력값이 다섯 자릿수까지여서 가능했던 방법이지 다신 이렇게 하지말자.
접근 방식 1의 코드이다.
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int num, num_cpy;
int dec_cnt = 0;
while (1) {
cin >> num;
num_cpy = num;
if (num == 0)
break;
else {
while (1) {
dec_cnt++;
num_cpy /= 10;
if (num_cpy == 0)
break;
}
if (dec_cnt == 1)
cout << "yes" << endl;
else if (dec_cnt == 2) {
if (num % 10 == num / 10)
cout << "yes" << endl;
else
cout << "no" << endl;
}
else if (dec_cnt == 3) {
if (num % 10 == num / 100)
cout << "yes" << endl;
else
cout << "no" << endl;
}
else if (dec_cnt == 4) {
if (num % 10 == num / 1000) {
num /= 10;
num %= 100;
if (num % 10 == num / 10)
cout << "yes" << endl;
else
cout << "no" << endl;
}
else
cout << "no" << endl;
}
else if (dec_cnt == 5) {
if (num % 10 == num / 10000) {
num /= 10;
num %= 1000;
if (num % 10 == num / 100)
cout << "yes" << endl;
else
cout << "no" << endl;
}
else
cout << "no" << endl;
}
}
dec_cnt = 0;
}
return 0;
}< 접근 방식 2 - 성공 >
내 스스로 접근 방식 1로 푼 게 짜증이 나서 곰곰이 생각해보던 중 처음에 언급한 실수가 떠올랐다.
바로 개선.
팰린드롬은 뒤집어도 원래의 것과 같게 나오는 것이기에 strcpy()를 통해 원본을 복사하고 reverse()를 통해 복사한 것을 뒤집고 strcmp()를 통해 원본과 뒤집힌 복사본을 비교하면 된다.
아래는 접근 방식 2의 코드이다.
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
char num[6] = { 0 };
char num_cpy[6] = { 0 };
while (1) {
cin >> num;
if (num[0] == '0')
break;
else {
strcpy(num_cpy, num);
reverse(num, num + strlen(num));
if (strcmp(num_cpy, num) == 0)
cout << "yes" << endl;
else
cout << "no" << endl;
}
}
return 0;
}정신 차리자 ㅎ
'컴퓨터 공학 > Problem Solving' 카테고리의 다른 글
C++) 백준 4134번: 다음 소수 (0) 2023.03.27 C++) 백준 2485번: 가로수 (최대공약수 문제) (1) 2023.03.26 C++) 백준 1934번: 최소공배수(유클리드 호제법) (0) 2023.03.24 C++) 백준 1436번: 영화감독 숌 (0) 2023.03.24 C++) 백준 1018번: 체스판 다시 칠하기 (0) 2023.03.23