Notice
Recent Posts
Recent Comments
Link
개발 공부~
[백준 - 17609] 회문 .java 본문
https://www.acmicpc.net/problem/17609
- 회문 : 처음부터 시작, 끝부터 시작하는 포인터 2개를 두고 하나씩 증가, 감소시키며 현재 가리키는 문자가 일치하면 회문
- 유사회문: 회문이다가 처음으로 다른 지점을 만났을때 그 지점의 두 포인터중 하나를 각각 뺀 문자열이 회문이면 유사회문
- => 문자 하나를 제거하여 회문으로 만들 수 있어야함
=> 회문인지 검사하다 처음 다른 지점이 나왔을때, 2개의 문자열이 회문인지 검사 -> 회문이면 유사회문
- isPaindrome 함수
문자열이 회문인지 확인
l과 r을 이용해 문자열의 양 끝에서부터 하나씩 비교
import java.util.Scanner;
public class Main {
//주어진 문자열이 회문인지 확인하는 함수
public static boolean isPaindrome(char[] s, int l, int r) {
while(l<=r) {
if(s[l]!=s[r]) return false;
l++;
r--;
}
return true;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
while(n-->0) {
char[] s = sc.next().toCharArray();
//회문이면 0
int l=0,r=s.length-1;
int answer = 0;
while(l<=r) {
//유사회문 혹은 회문이 아니면
if(s[l]!=s[r]) {
//현재 l이나 r이 가리키는 문자를 하나씩 제거했을때 회문이면 유사회문
if(isPaindrome(s, l, r-1) || isPaindrome(s, l+1,r)) answer =1;
else answer=2;//회문 아님
break;//결과가 나왔으니 빠져나가기
}
l++;
r--;
}
System.out.println(answer);
}
}
}
'코딩테스트 > 백준' 카테고리의 다른 글
[백준 - 16472] 고냥이 .java (1) | 2025.05.27 |
---|---|
[백준 - 15831] 준표의 조약돌 .java (1) | 2025.05.22 |
[백준 - 11728] 배열 합치기 .java (0) | 2025.05.21 |
[백준 - 12891] DNA 비밀번호 (1) | 2025.05.21 |
[백준 - 2230] 수 고르기 .java (1) | 2025.05.20 |