https://www.acmicpc.net/problem/1259
1259번: 팰린드롬수
입력은 여러 개의 테스트 케이스로 이루어져 있으며, 각 줄마다 1 이상 99999 이하의 정수가 주어진다. 입력의 마지막 줄에는 0이 주어지며, 이 줄은 문제에 포함되지 않는다.
www.acmicpc.net
// 코드
#include <bits/stdc++.h>
using namespace std;
int p(int x){ // 10을 x번 곱해서 반환하는 함수
int res = 1;
for(int i = 0; i < x; i++) res *= 10;
return res;
}
int main(void){
int num, tmp, cnt, res[5];
while(true)
{
cnt = 0;
cin >> num;
if(num == 0) break;
// 입력이 0일 경우 종료
tmp = num;
while(tmp != 0)
{ // tmp가 0이 아니라면 반복
res[cnt] = tmp % 10;
// res[cnt]에 tmp 끝자리 삽입
tmp = tmp / 10;
// 끝자리 버리기
cnt += 1;
// 1 증가
}
for(int i = 1; i <= cnt ; i++) tmp += p(cnt-i)*res[i-1];
// p함수의 반환 값과 res배열을 곱해서 tmp에 더하기
if(tmp == num) cout << "yes" << '\n';
// 펠린드롬수라면 yes
else cout << "no" << '\n';
// 아니면 no
}
return 0;
}
// 리뷰
이 문제는 거꾸로 했을때도 같은 수를 찾는것이기 때문에 입력받은 수 끝자리부터 하나씩 배열에 저장하여
해당하는 배열마다 10*x를 곱한다음 tmp에 더하고 입력 값과 비교하여 펠린드롬수를 찾았다.
예 ) 100의자리 수라면 10*2
'알고리즘' 카테고리의 다른 글
[백준/C++] 1436 영화감독 숌 (0) | 2022.06.23 |
---|---|
[백준/C++] 1874번 스택 수열 (0) | 2021.12.05 |
[백준/C++] 5397번 키로거 List (1) | 2021.12.03 |
[백준/C++] 1158번 요세푸스 문제 List iterator 사용 (0) | 2021.12.02 |
[백준/C++] 3273번 두 수의 합 (0) | 2021.11.29 |