인프런의 "자바(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()를 혼동하지 않도록 주의하자!
- 정규식을 사용할 수 있다.
'Study > 알고리즘' 카테고리의 다른 글
[알고리즘/인프런] String(문자열) #1-10. 가장 짧은 문자거리 (0) | 2022.04.27 |
---|---|
[알고리즘/인프런] String(문자열) #1-09. 숫자만 추출 (0) | 2022.04.18 |
[알고리즘/인프런] String(문자열) #1-07. 회문 문자열 (0) | 2022.04.17 |
[알고리즘/인프런] String(문자열) #1-06. 중복문자제거 (2) | 2022.04.14 |
[알고리즘/인프런] String(문자열) #1-05. 특정문자 뒤집기 (0) | 2022.04.13 |