본문 바로가기

알고리즘/인프런

섹션 1. String(문자열)_8. 유효한 펠린드롬

문제

  • 앞에서 읽을 때나 뒤에서 읽을 때나 같은 문자열을 팰린드롬이라고 합니다.
  • 문자열이 입력되면 해당 문자열이 팰린드롬이면 "YES", 아니면 “NO"를 출력하는 프로그램을 작성하세요.
  • 단 회문을 검사할 때 알파벳만 가지고 회문을 검사하며, 대소문자를 구분하지 않습니다.
  • 알파벳 이외의 문자들의 무시합니다.

입력

  • 알파벳 이외의 문자들의 무시합니다.

출력

  • 첫 번째 줄에 팰린드롬인지의 결과를 YES 또는 NO로 출력합니다.

입출력 예제


풀이 방식은 다음과 같다.

 

문자열로 입력받을 것이기에 nextLine() 을 사용하여 변수를 선언하고, 메소드를 호출한다.

 

바로 메소드 구현으로 넘어가보자.

디폴트 결과값을 NO로 설정한다.

toUppcerCase() 를 통해 입력받은 문자열을 모두 대문자로 바꾼다.

다음으로 replaceAll()에 정규식 [^A-Z]를 사용해서 영어 대문자 알파벳을 제외한 모든 문자를 "" 로 변경한다.

  • replaceAll("[정규식]", "") : 정규식에 해당하는 문자들을 "" 로 변경한다.
  • replaceAll("[^정규식]", "") : 정규식에 해당하는 문자들을 제외한 나머지를 "" 로 변경한다.
  • replace("ABCD", "") : ABCD 문자를 "" 로 변경한다. 단, 정규식 사용이 불가능하다.

이해를 좀 더 쉽게 하기 위해 해당 부분에 대한 결과를 콘솔로 찍어보았다.

  • 입력값 : found7, time: study; Yduts; emit, 7Dnuof
  • 결과값 : FOUNDTIMESTUDYYDUTSEMITDNUOF

이제 reverse() 를 사용해서 문자열을 뒤집어준다.

마지막으로 정규식을 통해 변경한 문자열과 reverse()를 통해 뒤바꾼 문자열이 동일한지를 비교하여 동일하면 YES를 리턴한다.

 

수행 결과를 확인한다.


해당 글은 인프런 > 자바(Java) 알고리즘 문제풀이 : 코딩테스트 대비(김태원)강의를 참고하여 작성하였습니다.