본문 바로가기

백준/C++

[C++] 백준 1259번 - 팰린드롬수

728x90

 

 

문제 1259번

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

 

1259번: 팰린드롬수

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

www.acmicpc.net

 

문제를 보니 입력받는 변수말고 입력받은 것을 반대로 저장할 변수를 하나 더 만들어주면 될 것 같다. 입력값을 반대로 저장해주기 위해 string을 이용한다. 그렇게 입력값의 길이만큼 반복하여 인덱스를 알맞게 넣어 반대로 저장할 변수에 더해준다(입력값 길이에서 i를 빼주어 인덱스를 반대부터 해주도록 하고 인덱스니까 1을 한번 더 빼줌). 그렇게 두 변수를 비교하여 같으면 yes를 다르면 no를 출력해준다. 만약 입력값이 0이면 반복문을 빠져나온다.

 

여기서 내가 실수한게 있다...

- 내가 만든 변수는 string 타입이기 때문에 0인지 비교하려면 0에 ""를 붙여줘야 함

- temp는 한번 반복할 때마다 초기화해줘야 함(안 하면 그 전 값들이 함께 저장됨)

 

ㅎㅎ...

#include <iostream>
#include <string>
using namespace std;

int main() {
	string s;
	while (s != "0") {
		string temp;
		cin >> s;
		if (s == "0") {
			break;
		}

		for (int i = 0; i < s.length(); i++) {
			temp += s[s.length() - 1 - i];
		}
		if (temp == s) {
			cout << "yes" << "\n";
		}
		else {
			cout << "no" << "\n";
		}

	}
	return 0;
}

 

 

 

 

 

아 그리고 reverse() 함수가 있는 것을 깜빡해서 이것을 이용하여 풀기도 해봤다.

#include <iostream>
#include <string>
#include <algorithm>	//reverse 함수
using namespace std;

int main() {
	string s,temp;
	while (s != "0") {
		cin >> s;
		temp = s;
		reverse(temp.begin(), temp.end());

		if (temp == "0") {
			break;
		} else if (temp == s) {
			cout << "yes" << '\n';
		} else {
			cout << "no" << '\n';
		}
		
	}
	return 0;
}

 

 

 

 

728x90