[Java] 백준(브론즈-1) 1257번 - 팰린드롬수

문제 풀이
이 문제는 주어지는 문자열 수들을 데칼코마니 방식으로 접근하면 쉽게 풀 수 있다.
말 그대로 첫번째 인덱스 문자와 마지막 인덱스 문자를 비교하고 그 다음 인덱스들을 비교하는 방식으로 검증하며 이 인덱스가 다르면 팰린드롬 수가 아니라고 판단하면 된다.
아이디어 도출
- “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();
}
}
회고
- 주어진 문자열의 앞 뒤부터 안쪽으로 접근하니 문제를 쉽게 풀 수 있었다.
출처
- 해당 문제의 저작권은 문제를 만든이에게 있으며 자세한 내용은 문제 링크에서 참조바랍니다.