반응형

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

 

17609번: 회문

각 문자열이 회문인지, 유사 회문인지, 둘 모두 해당되지 않는지를 판단하여 회문이면 0, 유사 회문이면 1, 둘 모두 아니면 2를 순서대로 한 줄에 하나씩 출력한다.

www.acmicpc.net

 

시간초과가 나서 유사회문을 일중포문으로 바꿨습니다. 자꾸 틀렸습니다가 나왔었는데 유사회문일 경우 범위를 잘못지정해줘서 "abcd"가 1이 나오고 있었습니다

#include <iostream>
#include <string>
using namespace std;
int n, m;
string s;
int isPalindrome() {
	for (int i = 0; i < s.length() / 2; i++)
		if (s[i] != s[s.length() - 1 - i]) return 0;
	return 1;
}
int canPalindrome() {
	for (int k = 0; k < 2; k++) {
		int f = 0;
		for (int i = 0, j = s.length() - 1; i <= j + 2; i++, j--) {
			if (s[i] != s[j]) {
				if (f) {
					f = 0;
					break;
				}
				k ? j-- : i++;
				f = 1;
			}
		}
		if (f) return 1;
	}
	return 0;
}
int check() {
	if (isPalindrome()) return 0;
	else if (canPalindrome()) return 1;
	else return 2;
}
int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	cin >> n;
	for (int i = 0; i < n; i++) {
		cin >> s;
		cout << check() << "\n";
	}
}
반응형

'Algorithm' 카테고리의 다른 글

백준 12781 : PIZZA ALVOLOC  (0) 2021.11.11
백준 12784 : 인하니카 공화국  (0) 2021.11.11
백준 13459 : 구슬 탈출  (0) 2021.11.11
백준 10830 : 행렬 제곱  (0) 2021.11.11
백준 6137 : 문자열 생성  (0) 2021.11.11

+ Recent posts