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

[Java] 회문문자열

by codeok 2022. 6. 14.
반응형

설명

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

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

단 회문을 검사할 때 대소문자를 구분하지 않습니다.

입력

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

출력

첫 번째 줄에 회문 문자열인지의 결과를 YES 또는 NO로 출력합니다.

 

예시 입력 1 

gooG

 

예시 출력 1

YES

 

while문과 leftIndex와 rightIndex를 이용한 방법

while 문으로 leftIndex가 rightIndex 보다 작을 때 까지 반복을 하며 문자를 접근했다.

회문 문자열이 아니면 answer = "NO"를 할당하고, break하고 종료로 풀었다.

package section01.E07_회문문자열;

import java.io.*;

public class Main {

    public String solution(String word){

        // 입력  : gooG, word.length() >= 100
        // 출력  : 회문 문자열이면 "YES" else "NO"
        // 1. 대소문자를 구분하지 않기에 입력값인 word를 toLowerCase()
        // 2. while문으로 leftIndex가 rightIndex보다 작을때 까지 반복한다.
        // 2.1. word의 leftIndex의 값과 rightIndex의 값이 다르면 answer를 "NO"로 변경 후 break
        String answer = "YES";

        String lowerWord = word.toLowerCase();
        int leftIndex = 0, rightIndex = lowerWord.length() - 1;

        while (leftIndex < rightIndex){
            if (lowerWord.charAt(leftIndex) != lowerWord.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 word = br.readLine();
        bw.write(T.solution(word));

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

 

for문으로 푸는 방법

for문을 word.length() / 2만큼 반복해서 회문문자열을 비교했다.

package section01.E07_회문문자열;

import java.io.*;

public class MainA {

    public String solution(String word){

        String answer = "YES";

        int wordLength = word.length();
        word = word.toUpperCase();

        for (int i = 0; i < wordLength / 2; i++){
            if (word.charAt(i) != word.charAt(wordLength - i - 1)){
                answer = "NO";
                return answer;
            }
        }

        return answer;
    }
 }

 

StringBuilder.reverse()와 equalsIgnoreCase()로 푸는 방법

회문 문자열인지만 검사하는 것이기에 StringBuilder().reverse()로 문자열을 뒤집어서 reverseWord에 할당했다.

문제 조건에 대소문자를 구분하지 않기에, 대소문자 상관없이 비교하기 위해서 equalsIgnoreCase()로 toLowerCase() 또는 toUpperCase()를 사용하지 않고 해결이 가능하다.

package section01.E07_회문문자열;

import java.io.*;

public class MainA {

    public String solution(String word){

        String answer = "YES";
        String reversedWord = new StringBuilder(word).reverse().toString();

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

        return answer;
    }
 }

 

반응형