알고리즘 : C++/BaekJoon

백준 10988번 - 팰린드롬인지 확인하기

동 노이만 2023. 5. 19. 17:37

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

 

10988번: 팰린드롬인지 확인하기

첫째 줄에 단어가 주어진다. 단어의 길이는 1보다 크거나 같고, 100보다 작거나 같으며, 알파벳 소문자로만 이루어져 있다.

www.acmicpc.net

 

풀이 과정

 글자 수가 홀수일 경우, 가운데 글자를 무시하도록 했고, 스택에 절반을 담고 top과 다음 글자를 비교하면서 넘겼다. 이외에도 양 인덱스를 하나씩 읽어오며 비교하는 것도 가능하다.

 

느낀 점

 flag를 설정할 때는 특정조건에서 변화되는 값의 반대값으로 초기화를 해야한다. 처음에 f를 초기화 해주지않아 false 상태였고, 팰린드롬이 아니라면 true로 전환하기 때문에, 팰린드롬인 경우 초기값인 false가 출력되었다.

 

//이번 코드
#include<bits/stdc++.h>
using namespace std;

string str;
stack<char> stk;
bool f = true;

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL); cout.tie(NULL);

	cin >> str;
	int i = 0;
	for (i = 0; i < (int)str.size() / 2; i++) {
		stk.push(str[i]);
	}
	
	if (str.size() % 2) i++;
	
	while (stk.size()) {
		if (stk.top() != str[i]) f = 0;
		stk.pop(); i++;
	}

	cout << f << "\n";

	return 0;
}

 

//예전 코드
#include<bits/stdc++.h>
using namespace std;
string s;
int main() {
	cin >> s;
	int j = s.size() - 1;
	for (int i = 0; i < j; i++, j--) {
		if (s[i] != s[j]) {
			cout << "0";
			return 0;
		}
	}
	cout << "1";
	return 0;
}