본문 바로가기
Computer Science/Algorithm

[Inflearn] 팰린드롬

by 코딩맛 2022. 11. 5.

인프런의 자바(Java)알고리즘 문제풀이 입문:코딩테스트 대비 강좌의 강의를 보고 문제 해설을 작성해보았습니다.

 

섹션1. String(문자열)의 8. 팰린드롬 강의편 입니다.

 

설명

앞에서 읽을 때나 뒤에서 읽을 때나 같은 문자열을 팰린드롬이라고 합니다.

문자열이 입력되면 해당 문자열이 팰린드롬이면 "YES", 아니면 “NO"를 출력하는 프로그램을 작성하세요.

단 회문을 검사할 때 알파벳만 가지고 회문을 검사하며, 대소문자를 구분하지 않습니다.

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

 

입력

첫 줄에 길이 100을 넘지 않는 공백이 없는 문자열이 주어집니다.

 

출력

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

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class 팰린드롬 {
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String str = br.readLine();
		solution(str);
	}
	
	public static void solution(String str){
		String ans = "NO";
		str = str.toUpperCase().replaceAll("[^A-Z]", "");
		String tmp = new StringBuilder(str).reverse().toString();
		if(str.equals(tmp)) ans = "YES";
		System.out.println(ans);
		
	}
}

>> 해설

버퍼를 통해 문자열을 입력 받은후 solution() 메서드를 호출하고 받은 문자열을 매개변수로 넘겨줍니다.

ans값을 'NO' 로 정의해주고 대소문자를 구분하지 않는다고 하였으므로 toUpperCase() 를 이용하여 대문자로 치환해주고

회문을 검사할 때 알파벳만 가지고 검사한다고 하였으므로 replaceAll() 을 통해 알파벳이 아닌 문자를 빈 칸으로 치환하여 줍니다.

 

여기서 replace()는 정규식을 사용할 수 있고 replaceAll()은 정규식을 사용할 수 없습니다. 

정규식을 사용할 예정이기 때문에 replaceAll()을 사용하였습니다. 

 

replaceAll("[^A-Z]", "")를 분석해보자면 

A부터 Z까지의 알파벳이 아닌 문자를 빈칸으로 치환하라는 의미입니다.

그러면 str 문자열 변수에는 특수문자가 제거된 대문자 문자열이 들어옵니다.

문자열을 변경시켜주기 위한 StringBuilder()를 사용하여 문자열이 담긴 객체를 뒤집어주고(reverse()), 문자열로 변환시킵니다.(toString()) 그리고 이 값을 tmp에 넣은 후

 

원래 문자열인 str과 tmp 값이 같으면 회문이므로 ans 값을 'YES'로 변경시킵니다.

최종적으로 ans 값을 출력 시키고 프로그래밍을 마칩니다.

 

'Computer Science > Algorithm' 카테고리의 다른 글

[Inflearn] 가장 짧은 문자거리  (0) 2022.11.12
[Inflearn] 숫자만 추출  (0) 2022.11.05
[Inflearn] 회문 문자열  (0) 2022.11.04
[Inflearn] 중복 문자 제거  (0) 2022.11.02
[Inflearn] 특정 문자 뒤집기  (0) 2022.10.30