백준/C++

[백준] 1259번: 팰린드롬수 | C++ 풀이

성실한 당근농부 2023. 7. 3. 14:47

# 문제

어떤 단어를 뒤에서부터 읽어도 똑같다면 그 단어를 팰린드롬이라고 한다. 'radar', 'sees'는 팰린드롬이다.

수도 팰린드롬으로 취급할 수 있다. 수의 숫자들을 뒤에서부터 읽어도 같다면 그 수는 팰린드롬수다. 121, 12421 등은 팰린드롬수다. 123, 1231은 뒤에서부터 읽으면 다르므로 팰린드롬수가 아니다.

 

 


 

# 풀이

팰린드롬 수인지 확인하는 문제! 반복문을 통해 확인하는 방법과 <algorithm> 헤더에 정의된 reverse() 함수를 이용한 방법, 총 두 가지를 소개하려고 한다.

우선 반복문을 이용하는 방법 먼저 정답 소스코드를 확인해보자.

 

#include <iostream>
using namespace std;

int main(){
    ios_base::sync_with_stdio(false);	// 두 표준 입출력 동기화 해제
    cin.tie(NULL);	// 입력과 출력 묶음을 풀기
    
    string num;
    while(true){
        bool palindrome = 1;
        cin >> num;
        if(num == "0") break;

        for(int i=0; i<=num.length()/2; i++){
            if(num[i] != num[num.length()-1-i]){
                palindrome = 0;
                break;
            }
        }
        if(palindrome) cout << "yes\n";
        else cout << "no\n";
    }
    return 0;
}

우선 숫자의 양 끝을 비교하면서 가운데로 이동해야 하기 때문에 확인해야할 숫자를 string 변수에 받아주었다.

그리고 팰린드롬 수인지 확인해줄 bool 타입 palindrome 변수를 true로 선언 및 초기화.

마지막 입력은 0이므로, 무한루프 while문에서 0이 입력되었을 때 탈출하는 코드를 넣어주면 준비는 끝이다.

 

이제 for문을 돌며 확인해주면 되는데 for문의 조건식을 잘 설정해주어야 한다.

121은 1, 1 한 번 / 1231은 1, 1과 2, 3 두 번 확인하므로 문자열길이/2까지 for문을 돌려준다.

팰린드롬 수인지 검사 후 아니라면 false로 변경 후 반복문 탈출!

탈출 후 palindrome을 검사한 후 상태값에 맞게 출력해주면 정답이다.

 

 

 


 

# 풀이 2

이번엔  <algorithm> 헤더에 정의된 reverse() 함수를 이용한 방법이다.

 

#include <iostream>
#include <algorithm>
using namespace std;

int main(){
    ios_base::sync_with_stdio(false);	// 두 표준 입출력 동기화 해제
    cin.tie(NULL);	// 입력과 출력 묶음을 풀기
    
    string num;
    while(true){
        cin >> num;
        if(num == "0") break;

        string tmp = num;
        reverse(tmp.begin(), tmp.end());
        if(num == tmp) cout << "yes\n";
        else cout << "no\n";
    }
    return 0;
}

이번에도 아까와 동일하게 string 변수에 숫자를 받아오고, 무한루프 while문에서 숫자가 0일 경우 탈출하는 코드를 작성해준다.

그리고 string 임시 변수를 설정 후 값은 num과 동일하게 설정, reverse() 함수를 통해 tmp의 시작부터 끝까지 뒤집어준다.

 

만약 팰린드롬 수라면 역순으로 뒤집은 값도 동일할 것! (121는 뒤집어도 121, 12421은 뒤집어도 12421)

reverse 해준 tmp와 num을 비교 후 동일하다면 팰린드롬 수이므로 yes를 출력, 아니라면 no를 출력해주면 정답이다.

반복문을 통해 직접 구현한 코드보다 훨씬 간단하지만 입력 값이 크지 않아서 풀이 1과 2의 메모리와 수행 시간은 동일했다.

 

 

 


 

 

 

 

 

 


 

 

 

 

1259번: 팰린드롬수

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

www.acmicpc.net

 

728x90