[백준 BOJ] 1259번 팰린드롬수 (C++/cpp)

2022. 1. 8. 15:07PS (Program Solving)/BOJ (백준)

문제 설명

https://www.acmicpc.net/problem/1259

 

1259번: 팰린드롬수

입력은 여러 개의 테스트 케이스로 이루어져 있으며, 각 줄마다 1 이상 99999 이하의 정수가 주어진다. 입력의 마지막 줄에는 0이 주어지며, 이 줄은 문제에 포함되지 않는다.

www.acmicpc.net

백준 BOJ 1259번 팰린드롬수 문제 사진

 

접근 방법 - 단순 문자열 연산 문제

백준의 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; }
	}
}

 

제출 결과

백준 BOJ 1259번 팰린드롬수 문제 C++ 제출 결과

(2022.01.06 백준 1259번 제출 결과)

반응형