17609번: 회문
각 문자열이 회문인지, 유사 회문인지, 둘 모두 해당되지 않는지를 판단하여 회문이면 0, 유사 회문이면 1, 둘 모두 아니면 2를 순서대로 한 줄에 하나씩 출력한다.
www.acmicpc.net
문제 설명 :
회문이면 0, 유사회문이면 1, 그 외는 2를 출력
문제 풀이 :
두 포인터로 문자열의 앞 부분, 뒷 부분을 각각 증가 감소 시키면서 중앙 부분에서 만날 때까지 검사합니다.
만약 회문이 아니면 left를 넘어가서 검사하거나 right를 넘어가서 검사해서 중앙 부분에서 만난다면 유사회문이 됩니다.
유사 회문은 한 문자를 삭제하는 것이 조건입니다.
import java.util.Scanner;
public class Main{
static int answer;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
for (int tc = 0; tc < T; tc++) {
String s = sc.next();
answer = solv(s);
System.out.println(answer);
}
}
public static int solv(String s) {
answer = 0;
int left = 0, right = s.length()-1;
while(left<right) {
if(s.charAt(left) == s.charAt(right)) {
//회문이면
left ++;
right--;
}
else {
//회문이 아니면
int leftcopy = left, rightcopy = right;
//left skip
leftcopy++;
while(leftcopy<rightcopy) {
if(s.charAt(leftcopy)==s.charAt(rightcopy)) {
leftcopy++;
rightcopy--;
}
else {
answer++;
break; // 다 확인할 필요가 없음
}
}
leftcopy = left; rightcopy = right;
//right skip
rightcopy--;
while(leftcopy<rightcopy) {
if(s.charAt(leftcopy)==s.charAt(rightcopy)) {
leftcopy++;
rightcopy--;
}
else {
answer++;
break;
}
}
return answer;
}
}
return answer;
}
}
'ALGORITHM > 프로그래머스 | 백준 | 삼성 | 카카오' 카테고리의 다른 글
[프로그래머스] 네트워크 (0) | 2021.03.24 |
---|---|
[백준] 11660번 구간 합 구하기 5 (0) | 2021.03.23 |
[백준] 17413번 단어 뒤집기2 (0) | 2021.03.19 |
[프로그래머스] 올바른 괄호 (0) | 2021.03.19 |
[프로그래머스] 단속카메라 (0) | 2021.03.16 |