반응형
문제
풀이
투포인터를 사용합니다.
앞과 뒤에서 인덱스를 조절하며 팰린드롬인지 검사합니다.
만약 팰린드롬이 아니라면, check를 true로 바꿔주고 유사회문인지 검사하기 위하여 isPalin함수를 재귀호출합니다.
검사 후에, isP가 true고 check가 false면 팰린드롬, isP가 true고 check가 true면 유사회문, isP가 false인 경우에는 회문이 아니므로 각각에 맞는 정답을 출력합니다.
소스 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
#include<iostream>
#include<queue>
#include<vector>
#include<string>
using namespace std;
int t;
string s;
bool check;
bool isPalin(int fidx, int bidx)
{
while (fidx < bidx)
{
if (s[fidx] == s[bidx])
{
fidx++;
bidx--;
}
else
{
if (check)
return false;
check = true;
return isPalin(fidx + 1, bidx) || isPalin(fidx, bidx - 1);
}
}
return true;
}
int main()
{
int t;
cin >> t;
for (int i = 0; i < t; i++)
{
cin >> s;
check = false;
bool isP = isPalin(0, s.size()-1);
if (isP && !check)
cout << 0 << '\n';
else if(isP && check)
cout << 1 << '\n';
else
cout << 2 << '\n';
}
return 0;
}
|
cs |
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[백준 14500] 테트로미노 (C++) (0) | 2021.08.21 |
---|---|
[백준 11507] 오르막 수 (C++) (0) | 2021.08.21 |
[백준 1756] 피자 굽기 (C++) (0) | 2021.08.19 |
[백준 5557] 1학년 (C++) (0) | 2021.08.19 |
[백준 2812] 크게 만들기 (C++) (0) | 2021.08.19 |