앞에서 읽을 때나 뒤에서 읽을 때나 같은 문자열을 팰린드롬이라고 합니다.
문자열이 입력되면 해당 문자열이 팰린드롬이면 "YES", 아니면 “NO"를 출력하는 프로그램을 작성하세요.
단 회문을 검사할 때 알파벳만 가지고 회문을 검사하며, 대소문자를 구분하지 않습니다.
알파벳 이외의 문자들의 무시합니다.
첫 줄에 길이 100을 넘지 않는 공백이 없는 문자열이 주어집니다.
첫 번째 줄에 팰린드롬인지의 결과를 YES 또는 NO로 출력합니다.
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
System.out.println(solution(str));
}
public static String solution(String str) {
str = str.toUpperCase().replaceAll("[^A-Z]", "");
String sb = new StringBuilder(str).reverse().toString();
if (str.equals(sb)) {
return "YES";
}
else {
return "NO";
}
}
}
예시입력인 found7, time: study; Yduts; emit, 7Dnuof 를 보면 문자 외에 , : 같은 특수 기호들이 있다.
문제에서는 알파벳 외에 모든 문자들은 무시하기 때문에 우선 해당 문자들을 제거하는 작업을 수행해야한다.
우선 문자열의 대소문자 구분이 없기때문에 .toUpperCase() 를 통해서 대문자화 하고 .replaceAll() 메소드를 사용했다.
.replaceAll() : String안에서 특정 문자들을 대체해준다.
예시
String str = "Apple";
System.out.println(str.replaceAll("[p]", "A"));
// 결과
// AAAle
[ ] 안에 변환할 문자를 입력. A-Z 같이 범위도 가능.
^는 부정이다.
String str1 = "ABCDEFG";
System.out.println(str1.replaceAll("[A-C]", "F"));
// 결과
// FFFDEFG