Coding/BOJ

[BOJ 백준] 1259 - 팰린드롬수 (C++)

Dev_Klare 2023. 11. 17. 21:23

문제 바로가기

https://www.acmicpc.net/problem/1259

 

1259번: 팰린드롬수

입력은 여러 개의 테스트 케이스로 이루어져 있으며, 각 줄마다 1 이상 99999 이하의 정수가 주어진다. 입력의 마지막 줄에는 0이 주어지며, 이 줄은 문제에 포함되지 않는다.

www.acmicpc.net


관련 알고리즘

- 팰린드롬


정답 및 해설

앞뒤 어디로 읽어도 같은 단어를 팰린드롬이라 한다.

한글로는 '기러기', '스위스', '토마토' 등이, 영어로는 'level', 'eye', 'mom' 등이 팰린드롬이다.

위 문제는 숫자로 팰린드롬을 판단하는 문제인데, 문자열의 팰린드롬처럼 다루어도 좋지만

이번 문제에서는 정수를 이용한 팰린드롬 문제인 만큼 정수로 계산하도록 하겠습니다.

입력받은 정수를 일의 자리부터 역순으로 재배열하여 두 수가 같은지 비교하여 팰린드롬인지 판단합니다.


C++

더보기
#include<bits/stdc++.h>
using namespace std;
int main(){
    int num,n1,n2;
    while(1){
        n2=0;
        cin>>num;
        if(num==0) break;
        n1=num;
        while(n1>0){
            n2*=10;
            n2+=n1%10;
            n1/=10;
        }
        if(n2==num) cout<<"yes\n";
        else cout<<"no\n";
    }
}

 

Line 해설
4 int num : 입력받은 정수
int n1, n2 : 팰린드롬인지 판별하기 위해 사용할 정수
5 while(1) 구문으로 무한루프에 진입 
6~9 변수 n2를 0으로 초기화합니다. (이유는 Line 10~14에서 설명)
정수 num을 입력받고 if 조건문으로 num==0 이라면 break 문으로 반복을 종료하고 프로그램 종료
아니라면 n1에 num을 대입하고 다음 코드로 이동합니다.
10~14 n1이 0보다 크면 n2*=10, n2+=n1%10, n1/=10 구문을 반복합니다.
위 코드를 통하여 n1을 일의 자리부터 역순으로 재배치합니다.
ex) n1=102, n2=0 → n1=10, n2=2 → n1=1, n2=20 → n1=0, n2=201
15~16 n1을 재배치한 n2와 처음 입력받은 num을 비교하여 같다면 yes 다르면 no를 출력합니다.