문제
각 줄마다 주어진 수가 팰린드롬수면 'yes', 아니면 'no'를 출력한다.
입력은 여러 개의 테스트 케이스로 이루어져 있으며, 각 줄마다 1 이상 99999 이하의 정수가 주어진다.
입력의 마지막 줄에는 0이 주어지며, 이 줄은 문제에 포함되지 않는다.
실행 결과
코드(c++)
#include <iostream>
#include <string>
using namespace std;
// 문자열이 팰린드롬이면 true 라턴
bool isPalindrome(string str) {
bool isPalindrome = true;
for (int i = 0; i < str.length() / 2; i++) {
if (str[i] != str[str.length() - i - 1]) {
isPalindrome = false;
break;
}
}
return isPalindrome;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
string str = "";
while (cin >> str) {
if (str == "0") {
break;
}
if (isPalindrome(str))
cout << "yes";
else
cout << "no";
cout << endl;
string str = ""; // 초기화
}
return 0;
}
코드 설명
팰린드롬수란 어떤 단어를 뒤에서부터 읽어도 똑같은 수를 의미한다.
즉 문자열 중 가운데 부분을 기준으로 대칭이면 된다.
ex. 12121, 13455431
이를 판단하기 위해 문자열을 한 문자씩 나누고
문자열의 i번째 문자와 n-i번째 문자가 같은지 비교한다.여기서 n은 문자열의 길이인 str.length()을 의미한다.코드 작성 시 주의해야 할 점은 배열 index는 0부터 n-1까지이기 때문에
str[i] != str[str.length() - i - 1] 이런 식으로 작성해야 한다.
그리고 문자열의 전체 길이의 절반까지만 비교해도 결과가 같기 때문에
str.length() / 2까지만 비교해도 문제 없이 돌아간다.
문제 출처:
https://www.acmicpc.net/problem/1259
'PS' 카테고리의 다른 글
코드트리: 함수를 이용한 연속부분수열 여부 판단하기 (0) | 2024.05.06 |
---|---|
백준 2869번: 달팽이는 올라가고 싶다 (0) | 2024.05.03 |
코드트리: 최대공약수와 최소공배수 (0) | 2024.04.28 |
백준 2747번: 피보나치 수 (0) | 2024.04.27 |
백준 2444번: 별 찍기 - 7 (0) | 2024.04.26 |