1 minute read




문제 풀이


이 문제는 주어지는 문자열 수들을 데칼코마니 방식으로 접근하면 쉽게 풀 수 있다.
말 그대로 첫번째 인덱스 문자와 마지막 인덱스 문자를 비교하고 그 다음 인덱스들을 비교하는 방식으로 검증하며 이 인덱스가 다르면 팰린드롬 수가 아니라고 판단하면 된다.


아이디어 도출

  • “0”을 입력받으면 입력을 종료한다.
  • 첫번째 인덱스와 마지막 인덱스부터 비교하기 위해 주어진 문자열 수를 순회한다.
    • 순회할 때 해당 문자열 길이/2 만큼 순회하면 첫번째와 마지막부터 비교해갈 수 있다.
  • 위 과정중에서 첫번째 인덱스 문자열부터 마지막 인덱스 문자열까지 비교하며 문자열이 다르다면 no를 출력하고 같으면 yes를 출력하면 된다.

아이디어를 보면 알겠지만 단순한 방법으로 풀 수 있음을 알 수 있다. 바로 코드를 작성해보자.

1
2
3
4
5
while(true) {
    String str = br.readLine();
    if(str.equals("0")) break;
    ...
}

마음대로 문자열들을 입력받으면서 입력의 종료는 “0”을 기준으로 판단하기에 “0”을 입력받으면 입력을 종료한다.

1
2
3
4
5
6
7
8
9
while(true) {
    ...
    boolean res = true;
    for(int i=0; i<str.length()/2; i++) {
        if(str.charAt(i) != str.charAt(str.length()-i-1)) res = false;
    }
    if(res) bw.write("yes"+"\n");
    else bw.write("no"+"\n");
}

첫번째 인덱스 문자열부터 마지막 인덱스 문자열까지 비교하며 팰린드롬 수인지 확인할 때 사용할 boolean 변수를 하나 만든다.
그리고 주어진 문자열 길이의 절반만큼 순회하면서 첫번째 인덱스와 마지막 인덱스 문자를 비교하며 팰린드롬 수인지 확인한다.
팰린드롬수라면 res가 true이기에 yes를 출력하고, 순회과정 중 팰린드롬수가 아니라면 res가 false가 되기에 no를 출력하면 된다.



작성코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import java.io.*;

class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        while(true) {
            String str = br.readLine();
            boolean res = true;

            if(str.equals("0")) break;

            for(int i=0; i<str.length()/2; i++) {
                if(str.charAt(i) != str.charAt(str.length()-i-1)) res = false;
            }
            if(res) bw.write("yes"+"\n");
            else bw.write("no"+"\n");
        }

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

회고

  • 주어진 문자열의 앞 뒤부터 안쪽으로 접근하니 문제를 쉽게 풀 수 있었다.

출처

  • 해당 문제의 저작권은 문제를 만든이에게 있으며 자세한 내용은 문제 링크에서 참조바랍니다.