17609번: 회문
각 문자열이 회문인지, 유사 회문인지, 둘 모두 해당되지 않는지를 판단하여 회문이면 0, 유사 회문이면 1, 둘 모두 아니면 2를 순서대로 한 줄에 하나씩 출력한다.
www.acmicpc.net
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class 회문 {
static int answer;
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
for(int i=0; i<T; i++) {
StringBuilder sb = new StringBuilder(br.readLine());
answer = 2;
solve(0, sb.length()-1, sb, 0);
System.out.println(answer);
}
}
private static void solve(int left, int right, StringBuilder sb, int flag) {
while(true) {
if(left >= right) {
break;
}
if(sb.charAt(left) == sb.charAt(right)) {
left++;
right--;
}
else {
if(flag == 0) {
solve(left+1, right, sb, 1);
solve(left, right-1, sb, 1);
}
return;
}
}
if(flag == 1) {
answer =1;
}
else {
answer =0;
}
}
}
소요시간 : 30분
한 문자를 삭제해야할 때 왼쪽 값을 삭제한 방법과 오른쪽 값을 삭제한 방법 둘다 시도해야합니다.
comwttwtmoc 와 같은 경우에
wttwt를 비교할 때 왼쪽 w를 삭제한다면 ttwt가 되서 유사회문이 되지 않고,
오른쪽 t를 삭제한다면 wttw로 유사회문이 되게 됩니다.
이 로직을 이용해서 간단하게 풀어보았습니다.
'알고리즘' 카테고리의 다른 글
[백준] 1068 트리 - java (0) | 2021.06.18 |
---|---|
[프로그래머스] [3차]압축 - java (0) | 2021.05.07 |
[백준] 문자열 폭발 - java (0) | 2021.05.04 |
[카카오 인턴] 키패드 누르기 - java (0) | 2021.04.30 |
[백준] 센서 - java (0) | 2021.04.28 |