문제 보기
이미지를 클릭하면 넘어갑니다.
풀이
왼쪽, 오른쪽 끝에서 다가가며 동일한 글자인지를 파악하는 문제.
매커니즘은 쉬우나 유사회문이라는 게 존재해 머리를 아프게 만든다.
그러나 회문을 판단하는 과정을 메서드로 빼내, 한 두 번씩 더 검증하는 과정을 거칠 뿐이라면 매우 쉽게 해결 된다.
1. 회문을 검증하는 메서드
private static boolean palindrome(String s, int left, int right) {
while (left < right) {
if(s.charAt(left) != s.charAt(right)) {
return false;
}
left++;
right--;
}
return true;
}
왼쪽, 오른쪽의 문자를 비교해 회문을 판별한다.
2. 유사회문 검증
int left = 0;
int right = s.length() - 1;
while (left < right) {
if(s.charAt(left) != s.charAt(right)) {
if (palindrome(s, left + 1, right)) {
bw.write(1 + "\n");
} else if (palindrome(s, left, right - 1)) {
bw.write(1 + "\n");
} else {
bw.write(2 + "\n");
}
break;
}
if(left + 1 >= right - 1) {
bw.write(0 + "\n");
}
left++;
right--;
}
유사 회문을 검장 하는 과정은 메인 메서드에서 실행했다.
자체적으로 회문 검증을 진행하는 와중에 한 번 패자부활 찬스를 주는 느낌이다.
left, right 값을 palindrome에서 리턴하면 전무 메서드로 빼낼 수 있었을 텐데 귀찮아서 그냥 이렇게 구현했다.
전체 코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int T = Integer.parseInt(br.readLine());
while (T-- > 0) {
String s = br.readLine();
int left = 0;
int right = s.length() - 1;
while (left < right) {
if(s.charAt(left) != s.charAt(right)) {
if (palindrome(s, left + 1, right)) {
bw.write(1 + "\n");
} else if (palindrome(s, left, right - 1)) {
bw.write(1 + "\n");
} else {
bw.write(2 + "\n");
}
break;
}
if(left + 1 >= right - 1) {
bw.write(0 + "\n");
}
left++;
right--;
}
}
bw.flush();
bw.close();
}
private static boolean palindrome(String s, int left, int right) {
while (left < right) {
if(s.charAt(left) != s.charAt(right)) {
return false;
}
left++;
right--;
}
return true;
}
}
GitHub 링크
'ProblemSolve > 항해99 코테스터디' 카테고리의 다른 글
99클럽 코테 스터디 4일차 TIL (챌린저): [백준][Java] 1865 웜홀 - 골드3 (0) | 2024.11.01 |
---|---|
99클럽 코테 스터디 4일차 TIL (미들러): [백준][Java] 24479 알고리즘 수업 - 깊이 우선 탐색 1 - 실버2 (0) | 2024.10.31 |
99클럽 코테 스터디 3일차 TIL (비기너): [프로그래머스][Java] 햄버거 만들기 - level 1 (0) | 2024.10.30 |
99클럽 코테 스터디 3일차 TIL (미들러): [프로그래머스][Java] 11561 징검다리 - level3 (0) | 2024.10.30 |
99클럽 코테 스터디 2일차 TIL (챌린저): [백준][C++] 1389 케빈 베이컨의 6단계 법칙 - 실버1 (0) | 2024.10.29 |