본문 바로가기
카테고리 없음

[Java] 유효한 팰린드롬

by codeok 2022. 6. 14.
반응형

설명

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

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

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

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

입력

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

출력

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

 

예시 입력 1 

found7, time: study; Yduts; emit, 7Dnuof

 

예시 출력 1

YES

 

replaceAll과 leftIndex, rightIndex를 이용한 방법

해당 문제에서는 알파벳 이외의 문자들은 무시해야 한다는 전제 조건이 있다.

replaceAll("정규표현식", "치환할 문자")를 사용해서 알파벳 이외의 값들을 공백("")으로 만들어 줬다.

[^a-zA-Z] 는 a-zA-Z 즉 알파벳이 아닌 문자들을 말한다.

[] 대괄호는 문자들을 집합을 말한다. a-z와 같이 범위지정으로 문자들을 묶을수도 있다.

는 처음이라는 메타문자이기도 하지만, 대괄호 안에서 [^] 사용하면 부정형(not)으로 사용이 가능하다.

package section01.E08_유효한_팰린드롬;

import java.io.*;

public class Main {

    public String solution(String words){

        // 입력 : words >= 100 공백이 없는 문자열
        // 출력 : 팰린드롬이면 "YES" else "NO"
        // 1. 알파벳 이외의 문자들은 replaceAll로 "" 치환
        // 2. while leftIndex와 rightIndex로 비교하면서 일치하지 않으면 return "NO"

        String answer = "YES";
        String lowerWord = words.toLowerCase();
        String onlyAlphaBetWord = lowerWord.replaceAll("[^a-zA-Z]", "");
        int leftIndex = 0, rightIndex = onlyAlphaBetWord.length() - 1;

        while (leftIndex < rightIndex){
            if (onlyAlphaBetWord.charAt(leftIndex) != onlyAlphaBetWord.charAt(rightIndex)){
                answer = "NO";
                break;
            }
            leftIndex++;
            rightIndex--;
        }

        return answer;
    }

    public static void main(String[] args) throws IOException {

        Main T = new Main();
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        String words = br.readLine();
        bw.write(T.solution(words));

        bw.flush();
        bw.close();
    }
}

 

StringBuilder를 통한 해결방법

알파벳이 아닌 문자를 처리하는 replaceAll()은 동일하다.

앞선 회문문자열 문제에서와 동일한 방식으로 StringBuilder.reverse()와 equalsIgnoreCase()로 해결이 가능하다.

package section01.E08_유효한_팰린드롬;

import java.io.*;

public class Main_StringBuilder {

    public String solution(String words){

        String answer = "YES";
        String onlyAlphaBetWord = words.replaceAll("[^a-zA-Z]", "");
        String reversedWord = new StringBuilder(onlyAlphaBetWord).reverse().toString();

        if (!onlyAlphaBetWord.equalsIgnoreCase(reversedWord)){
            answer = "NO";
        }

        return answer;
    }
}

 

반응형