# 문제
어떤 단어를 뒤에서부터 읽어도 똑같다면 그 단어를 팰린드롬이라고 한다. '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
'백준 > C++' 카테고리의 다른 글
[백준] 2609번: 최대공약수와 최소공배수 | C++ 풀이 (0) | 2023.07.05 |
---|---|
[백준] 2164번: 카드2 | C++ 풀이 (0) | 2023.07.04 |
[백준] 1920번: 수 찾기 | C++ 풀이 (0) | 2023.07.02 |
[백준] 2751번: 수 정렬하기 2 | C++ 풀이 (0) | 2023.07.01 |
[백준] 2839번: 설탕 배달 | C++ 풀이 (0) | 2023.06.30 |