카테고리 없음
8. 유효한 팰린드롬
yki1204
2021. 4. 15. 06:12
문제 설명
문자열이 입력되면 해당 문자열이 회문 문자열이면 "YES", 회문 문자열이 아니면 “NO"를 출력하는 프로그램을 작성하세요.
단, 회문을 검사할 때 알파벳만 가지고 회문을 검사하며, 대소문자를 구분하지 않습니다.
입력예시: found7, time: study; Yduts; emit, 7Dnuof
출력예시: YES
문제 풀이
초기 접근 아이디어는 앞에서 사용한 lt, rt를 사용해 중앙으로 이동하면서 모두 문자라면 서로 값이 같은지 비교 하는 방법이다.
public String solution(String s) {
String result = "YES";
int lt = 0, rt = s.length() -1;
while(lt < rt) {
if(!Character.isAlphabetic(s.charAt(lt))) {
lt++;
}else if(!Character.isAlphabetic(s.charAt(rt))) {
rt--;
}else if(Character.toLowerCase(s.charAt(lt)) != Character.toLowerCase(s.charAt(rt))) {
return "NO";
}else {
lt++;
rt--;
}
}
return result;
}
조금 더 좋은 방법은 replaceAll 정규식을 사용하여 불필요한 문자를 제거 후 비교하는 방법이다.
public String solution2(String s) {
String result = "NO";
s = s.toLowerCase().replaceAll("[^a-z]", "");
System.out.println(s);
String reverseString = new StringBuilder(s).reverse().toString();
if(s.equals(reverseString)) {
result = "YES";
}
return result;
}
전체를 소문자로 변환 후 replaceAll("[^a-z]", "") 를 사용하면 소문자 이외에 모든 문자가 제거된다.
이후 reverse를 한 후 equals 비교하여 결과를 출력하였다.