<1.7> 회문 문자열

mutexlocking·2022년 7월 8일
0

문제
: 입력한 문자열이 회문 문자열이면 "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);
   }
}

이 문제는 내가 이례적으로 빨리 푼 문제인데,
역시 요구사항을 명확히 파악하고 - 그에따른 로직을 코드로쉽게 구현할 방법만 알고 있으면, 금방 문제를 해결할 수 있는것 같다.

profile
개발자가 되고자 try 하는중

0개의 댓글