원하는 것은 뭐든지
[java][백준] 17609 - 회문 본문
반응형
문제
풀이
문제 해석
1. 회문은 앞 뒤 방향으로 볼 때 같은 순서의 문자로 구성된 문자열을 말한다. ex) 'abba', 'qwerewq' 등
2. 완전한 회문은 아니지만 글자 중 하나를 지워서 회문이 된다면 유사회문이라고 부른다. ex) 'summuus' 'xabba' 등
3. 첫째 줄에 테스트 케이스 T를 입력으로 밑으로 T개의 줄에 문자열이 입력으로 주어진다.
4. 각 테스트 케이스가 회문이면 0, 유사회문이면 1, 둘 다 아니면 2를 출력한다.
풀이
1. 처음과 끝을 비교하여 같으면 한칸씩 전진, 후진한다.
2. 만약 다른 글자가 나오면 각각을 지운 후 회문이 되는지 확인한다.
3. 회문이 된다면 유사회문이고 안된다면 보통 문자열이다.
소스코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
* 회문
* 골드 5
*/
public class No17609 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int t = Integer.parseInt(br.readLine());
StringBuilder answer = new StringBuilder();
while(t-->0){
String str = br.readLine();
answer.append(isPalindrome(str)).append("\n");
}
System.out.println(answer);
}
private static int isPalindrome(String str) {
StringBuilder sb = new StringBuilder(str);
int lt = 0;
int rt = str.length()-1;
while(lt < rt){
if(sb.charAt(lt) == sb.charAt(rt)){
rt--;
lt++;
}else{
StringBuilder delLeft = new StringBuilder(sb).deleteCharAt(lt);
StringBuilder delRight = new StringBuilder(sb).deleteCharAt(rt);
if(delLeft.toString().contentEquals(delLeft.reverse())
|| delRight.toString().contentEquals(delRight.reverse())){
return 1;
}
return 2;
}
}
return 0;
}
}
마무리
1. StringBuilder의 강력함을 깨달았다.
2. StringBuilder의 reverse() 메서드는 O(n)의 시간 복잡도를 가진다.
반응형
'개발 > 문제풀이' 카테고리의 다른 글
[java][백준] 2179 - 비슷한 단어 (0) | 2024.10.08 |
---|---|
[java][백준] 17182 - 우주탐사선 (2) | 2024.10.07 |
[java][백준] 31863 - 내진 설계 (0) | 2024.09.04 |
99클럽 코테 스터디 42일차 TIL , First Day Where You Have Been in All the Rooms (2) | 2024.09.01 |
99클럽 코테 스터디 41일차 TIL , Unique Paths II (0) | 2024.08.31 |
Comments