문제
회문인지, 유사 회문(한글자만 삭제하면 회문이 되는 경우)인지, 일반 문자열인지 확인하는 문제이다.
해결 방안
주어진 단어의 첫 부분은 증가시키고 끝 부분은 감소시키면서 비교해온다.
이 때 단어의 변화되는 첫 부분 문자와 끝 부분의 문자가 가운데에 올 때가지 같으면 회문(0)이다.
그렇지 않은 경우 첫 부분을 하나 증가시키거나 끝 부분을 하나 감소시켜서 한 글자를 삭제 시켜서 확인을 해보고 둘 중 하나의 경우라도 회문이면 유사회문(1)이고 둘다 안되면 일반 문자열(2)인 경우이다.
이를 코드로 나타내면 아래와 같다.
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Collections;
// 회문
// 회문:0 유사회문:1 그외:2
public class Main {
static int T;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
T = Integer.parseInt(br.readLine());
String word = "";
int result = 0;
for(int i=0; i<T; i++) {
word = br.readLine();
result = palindrome(word);
System.out.println(result);
}
}
public static int palindrome(String word) {
int result = 0;
int left = 0, right = word.length()-1;
while(left<=right) {
if(word.charAt(left) == word.charAt(right)) {
left++;
right--;
}
else {
int l = left;
int r = right;
l++;
while(l<=r) {
if(word.charAt(l) == word.charAt(r)) {
l++;
r--;
}
else {
result++;
break;
}
}
l = left;
r = right;
r--;
while(l<=r){
if(word.charAt(l) == word.charAt(r)) {
l++;
r--;
}
else {
result++;
break;
}
}
return result;
}
}
return result;
}
}
'Old > Algorithms' 카테고리의 다른 글
[JAVA] 프로그래머스 : 짝지어 제거하기 (2017 팁스타운) (0) | 2020.09.23 |
---|---|
[JAVA] 백준 15970번 : 화살표 그리기(한국정보올림피아드/KOI 2018/초등부) (0) | 2020.09.22 |
[JAVA] 백준 17608번 : 막대기(한국정보올림피아드/KOI 2019 1차대회/초등부) (0) | 2020.09.21 |
[JAVA] 백준 17616번 : 등수 찾기(한국정보올림피아드/KOI 2019 2차대회/초등부) (0) | 2020.09.17 |
[JAVA] 백준 17615번 : 볼 모으기(한국정보올림피아드/KOI 2019 2차대회/초등부) (0) | 2020.09.17 |