본문 바로가기
프로그래밍/백준 문제풀이

백준 1259번 팰린드롬수 C++ 문제풀이

by 마이바스켓토시아와세바타도로보 2024. 1. 28.

1~99999 사이의 숫자가 주어지고, 
앞뒤가 똑같은 번호라면 팰린드롬수라 하고 입력받을 시 yes, 이외에는 no를 출력하는 코드를 짜면 된다.

 

나는 간편하게 바로 string 형으로 받고 맨 앞과 맨 뒤부터 시작해 한 칸씩 좁혀가며 문자가 일치하는지 검수해줬다.

 

물론 앞의 절반과 뒤의 절반을 짝지어서 자릿수/2 번으로 검수 횟수를 줄일 수 있겠지만, 사소하게 조정하기 귀찮아서 모든 자리에 대해 2번씩 검수되고 있다. 그러나 이정도 규모의 문제라면 유의미한 차이가 없어보여서 그냥 했다.

 

주의해야 할 점은 string형 변수

string str = 12345 이라고 한다면 맨 앞 문자는 1이지만, string 의 특성상 맨 뒷 문자는 \0 인 것을 생각해서 

맨 앞과 맨 뒤 숫자는 str[0] 과 str[str.length() -1] 이 됨을 생각하며 코드를 작성해야 한다.

 

#https://itre.tistory.com/
#include <iostream>
#include <string>

using namespace std;

int main(void)
{

    string number;
    int k;

    while (1)
    {
        k = 0;
        cin >> number;

        if (number == "0")
            break;

        for (int i = 0; i < number.length(); i++)
        {
            // cout << "i : " << i << endl;
            // cout << "number.length() : " << number.length() << endl;
            // cout << "number[i] : " << number[i] << endl;
            // cout << "number[number.length() - i] : " << number[number.length() - (i+1)] << endl;

            if (number[i] == number[number.length() - (i + 1)])
                k++;

            // cout << "k : " << k << endl;
        }

        if (k == number.length())
            cout << "yes" << endl;
        else
            cout << "no" << endl;
    }
}

댓글