2022. 1. 8. 15:07ㆍPS (Program Solving)/BOJ (백준)
문제 설명
https://www.acmicpc.net/problem/1259
1259번: 팰린드롬수
입력은 여러 개의 테스트 케이스로 이루어져 있으며, 각 줄마다 1 이상 99999 이하의 정수가 주어진다. 입력의 마지막 줄에는 0이 주어지며, 이 줄은 문제에 포함되지 않는다.
www.acmicpc.net
접근 방법 - 단순 문자열 연산 문제
백준의 1259번 문제는 문자열을 이용한 단순 연산 문제인 것으로 보인다.
위에서 언급하고 있는 팰린드롬수는 결국, 뒤집어도 원래의 숫자와 같은 숫자를 의미한다고 할 수 있다.
따라서 양 옆으로 숫자가 같으면 yes를 출력하고, 아니라면 no를 출력하면 된다.
필자는 아래의 순서대로 코드를 작성하여 문제를 해결하였다.
코드의 실행 순서
1) 무한 반복문을 통해서 입력받기
(여기서 "0"을 입력받을 시 반복문에서 탈출하며 실행 종료한다.)
2) 사전에 변수 하나(no)를 0으로 초기화하면서 선언한다.
(이 변수는 팰린드롬수가 맞는지에 대한 여부를 결정한다.)
3) 문자열을 처음부터 가운데까지만 탐색하기 위해 반복문을 하나 더 실행한다.
4) 문자열 양 옆으로 2개의 문자가 같은지 확인한다. 탐색 방향은 양 옆에서 가운데로 좁혀온다.
만약 다른 경우를 찾아냈다면, no에 1을 추가하면서 3)의 반복문을 탈출한다.
5) 앞뒤가 완전히 똑같다면 no의 값은 0으로 유지되었을 것이며, 이는 곧 팰린드롬 수라 할 수 있다.
따라서, no의 값이 0이라면 "yes"를, no의 값이 1 이상이라면 "no"를 출력한다.
6) 입력받는 문자열이 "0"일 때까지 1)의 반복문을 계속 수행하기
성공한 코드
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <iostream>
#include <string>
using namespace std;
//백준 1259번 코드
int main() {
string ch;
while (1) {
cin >> ch;
if (ch == "0") { break; }
int no = 0;
for (int i = 0; i < ch.length() / 2; i++) {
if (ch[i] != ch[ch.length() - i - 1]) {
no++; break;
}
}
if (no == 0) { cout << "yes" << endl; }
else { cout << "no" << endl; }
}
}
제출 결과
(2022.01.06 백준 1259번 제출 결과)
'PS (Program Solving) > BOJ (백준)' 카테고리의 다른 글
[백준 BOJ] 1330번 두 수 비교하기 (C언어) (0) | 2022.01.08 |
---|---|
[백준 BOJ] 1292번 쉽게 푸는 문제 (C언어) (0) | 2022.01.08 |
[백준 BOJ] 1157번 단어 공부 (C언어) (0) | 2022.01.07 |
[백준 BOJ] 1152번 단어의 개수 (C언어) (0) | 2022.01.06 |
[백준 BOJ] 1100번 하얀 칸 (C++/cpp) (0) | 2022.01.05 |