Development Logs/Algorithms
[JAVA] 백준 17609번 : 회문(한국정보올림피아드/KOI 2019 1차대회/초등부)
유뱅유뱅뱅
2020. 9. 21. 22:50
반응형
문제
회문인지, 유사 회문(한글자만 삭제하면 회문이 되는 경우)인지, 일반 문자열인지 확인하는 문제이다.
해결 방안
주어진 단어의 첫 부분은 증가시키고 끝 부분은 감소시키면서 비교해온다.
이 때 단어의 변화되는 첫 부분 문자와 끝 부분의 문자가 가운데에 올 때가지 같으면 회문(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;
}
}
반응형