본문 바로가기
알고리즘

[백준/C++] 1259번 팰린드롬수

by heyh0 2021. 12. 4.

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