https://www.acmicpc.net/problem/17609
17609번: 회문
각 문자열이 회문인지, 유사 회문인지, 둘 모두 해당되지 않는지를 판단하여 회문이면 0, 유사 회문이면 1, 둘 모두 아니면 2를 순서대로 한 줄에 하나씩 출력한다.
www.acmicpc.net
과정
1. 탈출은 회문이 아님이 결정나거나, l과 r이 역전될 경우 탈출한다.
2. input[l]과 input[r]이 같은 경우 다음 칸 확인으로 넘어간다.
3. 왼쪽 칸을 옮긴 경우, 오른쪽 칸을 옮긴 경우를 둘 다 확인한다.
코드
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int T;
string input;
int dfs(int l, int r, int cnt){
if(l>r || cnt == 2)
return cnt;
if(input[l] == input[r]){
return dfs(l+1,r-1,cnt);
}
else{
int lcnt = cnt+1, rcnt = cnt+1;
if(input[l+1] == input[r])
lcnt = dfs(l+1,r,cnt+1);
else
lcnt = 2;
if(input[l] == input[r-1])
rcnt = dfs(l, r-1, cnt+1);
else
rcnt = 2;
return min(lcnt, rcnt);
}
}
void solution(){
cin>>T;
while(T--){
cin>>input;
cout<<dfs(0, input.length() - 1, 0)<<'\n';
}
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
solution();
return 0;
}

728x90
'알고리즘 > 백준 문제' 카테고리의 다른 글
| 20922 - 겹치는 건 싫어 (0) | 2023.07.17 |
|---|---|
| 14940 - 쉬운 최단거리 (0) | 2023.07.17 |
| 16401 - 과자 나눠주기 (0) | 2023.07.15 |
| 22682 - 가장 긴 짝수 연속한 부분 수열 (large) (0) | 2023.07.15 |
| 17266 - 어두운 굴다리 (0) | 2023.07.15 |
댓글