PS/백준

[BOJ] 백준 10988번 : 팰린드롬인지 확인하기 (JAVA)

제이온 (Jayon) 2020. 6. 11.

문제

알파벳 소문자로만 이루어진 단어가 주어진다. 이때, 이 단어가 팰린드롬인지 아닌지 확인하는 프로그램을 작성하시오.

팰린드롬이란 앞으로 읽을 때와 거꾸로 읽을 때 똑같은 단어를 말한다. 

level, noon은 팰린드롬이고, baekjoon, online, judge는 팰린드롬이 아니다.

입력

첫째 줄에 단어가 주어진다. 단어의 길이는 1보다 크거나 같고, 100보다 작거나 같으며, 알파벳 소문자로만 이루어져 있다.

출력

첫째 줄에 팰린드롬이면 1, 아니면 0을 출력한다.

 

풀이

앞으로 읽을 때와 거꾸로 읽을 때와 똑같은 단어를 '팰린드롬'이라고 하는데, 주어진 단어에 대해서 팰린드롬인지 확인하는 문제였습니다. 이 문제는 구현과 문자열 처리로 분류할 수 있고, 2가지 풀이 방법이 존재합니다.

 

풀이 - 반복문 사용

첫 번째는 반복문을 사용하여 마지막 인덱스부터 0번째 인덱스까지 거꾸로 문자를 탐색하면서 서로 문자가 같은지 검사하는 것입니다.

 

 

위와 같이 4번째 인덱스부터 (4, 0), (3, 1), (2, 2), (1, 3), (0, 4)가 서로 같은 문자인지 확인하는 로직을 반복문으로 작성해 주시면 됩니다.

아래는 위를 기반으로 작성한 소스코드입니다.

 

소스코드 - 반복문 사용

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
26
27
28
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
 
public class Main {
 
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        String input = br.readLine();
        int ans = 1;
        for (int i = input.length() - 1; i >= 0; i--) {
            char c = input.charAt(i);
 
            if (c != input.charAt(input.length() - i - 1)) {
                ans = 0;
                break;
            }
        }
 
        bw.write(ans + "\n");
        bw.flush();
        bw.close();
        br.close();
    }
 
}
cs

 

풀이 - StringBuilder 사용

두 번째는 StringBuilder 클래스 내에 있는 reverse() 메소드를 사용하는 것입니다. 이것은 문자열을 서로 뒤집어 주는 역할을 하기때문에 우리가 할 일은 기존에 있던 문자열과 뒤집은 문자열이 서로 동일한지 검사만 하면 됩니다.

단, 이때 문자열이 같은지 검사할 때는 '=='이 아니라 equals() 메소드를 사용해야한다는 점만 조심하시길 바랍니다.

참고로, StringBuilder에서 String을 반환할 때는 toString() 메소드를 사용하시면 됩니다.

아래는 위 과정을 정리한 소스코드입니다.

 

소스코드 - StringBuilder 사용

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
 
public class Main {
 
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringBuilder sb = new StringBuilder(br.readLine());
 
        bw.write(((sb.toString().equals(sb.reverse().toString())) ? 1 : 0+ "\n");
        bw.flush();
        bw.close();
        br.close();
    }
 
}
cs

 

지적 혹은 조언 환영합니다! 언제든지 댓글로 남겨주세요.

댓글

추천 글