[백준 1259] 팰린드롬수

백준 1259번 - 팰린드롬수

백준 1259번

❓ 문제

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

수도 팰린드롬으로 취급할 수 있다. 수의 숫자들을 뒤에서부터 읽어도 같다면 그 수는 팰린드롬수다. 121, 12421 등은 팰린드롬수다. 123, 1231은 뒤에서부터 읽으면 다르므로 팰린드롬수가 아니다. 또한 10도 팰린드롬수가 아닌데, 앞에 무의미한 0이 올 수 있다면 010이 되어 팰린드롬수로 취급할 수도 있지만, 특별히 이번 문제에서는 무의미한 0이 앞에 올 수 없다고 하자.


✏️ 풀이

결국 앞 뒤가 똑같은 전화번호수를 구하는 것이다.

문제를 보자마자 string으로 받아서 reverse 시키면 되겠다! 라고 생각하였다.

algorithm libraryreverse를 이용하면 쉽게 풀 수 있다.

풀이의 핵심은 아래와 같다.

  1. input을 convert int to string (to_string 사용)
  2. reverse(reverse_string.begin(), reverse_string.end())로 앞 뒤 바꾸기
  3. original string과 비교

아래는 정답 코드이다!


✔️ 정답 코드

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

vector<string> answer;

int main(void) {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);

  while(1) {
    int temp;
    string original_string;
    string reverse_string;

    cin >> temp;
    if (temp ==0)
      break;

    original_string = to_string(temp);
    reverse_string = to_string(temp);
    reverse(reverse_string.begin(), reverse_string.end());

    if (original_string.compare(reverse_string) == 0)
      answer.push_back("yes");
    else
      answer.push_back("no");
  }

  vector<string>::iterator it;
  for (it=answer.begin(); it!=answer.end(); it++) {
    cout << *it << "\n";
  }
  
  return 0;
}

Leave a comment