띠오니 개발자 성장일지
article thumbnail
반응형

 

 

인프런의 "자바(Java) 알고리즘 문제풀이 : 코딩테스트 대비" 강좌를 수강했습니다.

 


Q1-08. 유효한 팰린드롬

앞에서 읽을 때나 뒤에서 읽을 때나 같은 문자열을 '팰린드롬' 이라고 한다. ( 앞전 문제 회문 문자열과 같음)
입력된 문자열이 팰린드롬이면 "YES", 아니면 "NO" 를 출력하자.
단, 대소문자 구분 없으며 팰린드롬 체크 시 알파벳으로만 체크한다. (알파벳 외의 문자 무시)

 

반응형

 

👨🏻‍🏫 풀이 코드

String 클래스의 replaceAll() 메소드를 사용한다.

Java 11 공식문서에서 replaceAll 에 대한 설명을 확인할 수 있다.

replaceAll(String rex, String replacement) : 문자열 중 첫번째 파라미터 문자열을 전부 replacement 문자열로 바꾼다.

첫번째 파라미터는 정규식이 들어갈 수 있는데, 이 곳에서 확인할 수 있다.

그 동안 정규식에 대해서 잘 모른채로 사용해왔는데, 요 사이트에 잘 정리 되어있는 것 같아 도움이 많이 될 것 같다. 역시 공부는 공식문서로 하는게 답인가...

아래 코드에 적힌  replaceAll("[^a-z]", "") 은 문자열 중 소문자 a-z의 문자가 아닌(^) 다른 문자일 경우 지워버려라("")는 의미이다.  

만약 str.toUpperCase() 로 했다면 replaceAll("[^A-Z]", "") 로 적용할 수 있다.

그래서 앞의 01-07번 문제에서 해결했던 방법처럼 문자를 거꾸로 뒤집어서, 문자열이 일치하는지 비교하는 방식으로 풀면 된다.

import java.util.Scanner;

public class Main {

    public String solution(String str){
        String answer = "NO";

        str = str.toLowerCase().replaceAll("[^a-z]", "");
        String tmp = new StringBuilder(str).reverse().toString();
        if(str.equals(tmp)) answer = "YES";

        return answer;
    }

    public static void main(String[] args){
        Main main = new Main();

        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();

        System.out.println(main.solution(str));
    }
    
}

 

 

 

🤓 정리

  • replaceAll()과 replace()를 혼동하지 않도록 주의하자!
  • 정규식을 사용할 수 있다.

 

 


 

반응형
profile

띠오니 개발자 성장일지

@띠오니

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!