반응형
문제 유형: Two Pointers
회문(回文) 또는 팰린드롬(palindrome)은 앞 뒤 방향으로 볼 때 같은 순서의 문자로 구성된 문자열을 말한다. 예를 들어 ‘abba’ ‘kayak’, ‘reviver’, ‘madam’은 모두 회문이다. 만일 그 자체는 회문이 아니지만 한 문자를 삭제하여 회문으로 만들 수 있는 문자열이라면 우리는 이런 문자열을 “유사회문”(pseudo palindrome)이라고 부른다. 예를 들어 ‘summuus’는 5번째나 혹은 6번째 문자 ‘u’를 제거하여 ‘summus’인 회문이 되므로 유사회문이다.
여러분은 제시된 문자열을 분석하여 그것이 그 자체로 회문인지, 또는 한 문자를 삭제하면 회문이 되는 “유사회문”인지, 아니면 회문이나 유사회문도 아닌 일반 문자열인지를 판단해야 한다. 만일 문자열 그 자체로 회문이면 0, 유사회문이면 1, 그 외는 2를 출력해야 한다.
작성 코드
import java.util.Scanner;
public class Main {
public static boolean isPalindrome(String givenString, int left, int right) {
while (left <= right) {
if (givenString.charAt(left) != givenString.charAt(right)) return false;
left++;
right--;
}
return true;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
for (int i = 0; i < N; i++) {
int answer = 0;
String givenString = sc.next();
int left = 0, right = givenString.length() - 1;
while (left <= right) {
if (givenString.charAt(left) != givenString.charAt(right)) {
if (isPalindrome(givenString, left + 1, right) ||
isPalindrome(givenString, left, right - 1)
) {
answer = 1;
} else {
answer = 2;
}
break;
}
left++;
right--;
}
System.out.println(answer);
}
}
}
접근 방식
1. 두개의 인덱스 비교와 움직이는 조건이 있어 투포인터를 사용했다.
2. 끝이다.
개선 사항
1. 좀 더 코드를 간결하게 짤 수 있을지 고민해볼 필요가 있다.
2. 왜냐 회문을 구분하는 부분에서 아슬아슬하게 통과를 했다.
반응형
'알고리즘 > JAVA' 카테고리의 다른 글
Recursion: 백준 N과 M(6)-15655 (0) | 2024.08.22 |
---|---|
Recursion: 백준 N과 M(5) - 15654 (0) | 2024.08.21 |
Two Pointers: 백준 배열 합치기-11728 (0) | 2024.08.09 |
Two Pointers: 백준 수 고르기-2230 (0) | 2024.08.09 |
Two Pointers: 백준 부분합-1806 (0) | 2024.08.09 |