문제
: 입력한 문자열이 회문 문자열이면 "YES" , 회문 문자열이 아니면 "NO" 출력하기
(이때 대소문자는 구분하지 않으며,
회문 문자열이란 앞에서 읽을 때나 뒤로 읽을 때나 같은 문자열을 말한다.)
이 회문 문제는 예전에 백준 에서 보고 풀지 못했던거 같은데.. 다시 읽어보니 어려운 문제는 아니었다.
이 문제의 요구사항은 회문의 정의를 생각해보면 굉장히 직관적인데, "입력한 문자열을 역전시켜도 원래 문자열하고 일치하는지 여부를 말해라" 라고 정리할 수 있다.
또한 이때 조건으로 대소문자는 구분하지 않는다고 제시되어 있으므로,
나의 해결로직을 아래와 같이 구상할 수 있었다.
1. 일단 입력받은 문자열을 대문자로 통일시키자
- 대소문자를 구분하지 않는다는 말은, 대문자든 소문자든 신경쓰지 않고 한 알파벳으로 인식하겠다는 뜻이다.
- 따라서 우리는 각 알파벳의 형식을 대문자 or 소문자의 형식중 하나로 통일 시켜주면 된다..
- 나의 경우는 String 클래스의 인스턴스 메서드 toUpperCase()를 사용하여, 입력한 문자열의 알파벳을 전부 대문자로 통일시켰다.
2. 이후 회문의 정의가 거꾸로 읽어도 같은 문자열 이므로,
이에 따라 실제로 변환한 문자열을 역전시켜 - 원래 문자열하고 일치하는지를 검사하자
- 이때 문자열을 역전시키는 방법으로는 , 앞서 1.4번에서 배운 StringBuilder 클래스의 인스턴스 메서드인 reverse()를 사용하여 쉽게 적용시켰다.
위 로직을 기반으로 하여 작성한 코드는 아래와 같다.
import java.util.Scanner;
public class Main {
public static String solution(String str){
String str1 = str.toUpperCase();
String str2 = new StringBuilder(str1).reverse().toString();
if(str1.equals(str2)) return "YES";
else return "NO";
}
public static void main(String[] args){
//0. Scanner 준비
Scanner sc = new Scanner(System.in);
//1. 문자열 입력
String str = sc.next();
//2. solution을 통해 결과를 리턴받음
String result = solution(str);
//3. 결과 출력
System.out.println(result);
}
}
이 문제는 내가 이례적으로 빨리 푼 문제인데,
역시 요구사항을 명확히 파악하고 - 그에따른 로직을 코드로쉽게 구현할 방법만 알고 있으면, 금방 문제를 해결할 수 있는것 같다.