# 문제
어떤 단어를 뒤에서부터 읽어도 똑같다면 그 단어를 팰린드롬이라고 한다. '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의 메모리와 수행 시간은 동일했다.
'백준 > 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 |