https://www.acmicpc.net/problem/1259
[ 문제 ]
어떤 단어를 뒤에서부터 읽어도 똑같다면 그 단어를 팰린드롬이라고 한다. 'radar', 'sees'는 팰린드롬이다.
수도 팰린드롬으로 취급할 수 있다. 수의 숫자들을 뒤에서부터 읽어도 같다면 그 수는 팰린드롬수다. 121, 12421 등은 팰린드롬수다.
123, 1231은 뒤에서부터 읽으면 다르므로 팰린드롬수가 아니다.
또한 10도 팰린드롬수가 아닌데, 앞에 무의미한 0이 올 수 있다면 010이 되어 팰린드롬수로 취급할 수도 있지만, 특별히 이번 문제에서는 무의미한 0이 앞에 올 수 없다고 하자.
[ 입력 ]
입력은 여러 개의 테스트 케이스로 이루어져 있으며, 각 줄마다 1 이상 99999 이하의 정수가 주어진다.
입력의 마지막 줄에는 0이 주어지며, 이 줄은 문제에 포함되지 않는다.
[ 출력 ]
각 줄마다 주어진 수가 팰린드롬수면 'yes', 아니면 'no'를 출력한다.
[ 입출력 예시 ]
예제 입력 | 예제 출력 |
---|---|
121 1231 12421 0 | yes no yes |
- 단어들을 받아 하나씩 확인해줄 것이므로, 받은 단어를 문자 하나씩 저장해줄 char 배열 변수(str)를 선언한다.
- "0"이 입력 될 때까지 무한반복 할 것이므로, while로 무한 루프를 돌려줄 것이다.
받은 문자에 대해서는 우선적으로 yes라는 것으로 판독하여 시작할 것이므로 yes를 문자열 변수(judge)에 담아 시작한다.
- 입력 된 문자를 toCharArray();로 한 문자씩 담아준다.
문제에서 맨 앞에 무의미한 0은 올 수 없다고 나와있으므로, str[0] != '0'이 아니면 아래 코드를 실행시킨다. (0이 올 수 없는데 0이 입력되면 자동으로 종료하라는 뜻이기도 하므로)
- for문으로 받은 문자들을 확인하는데, str[i]와 != str[str.length-i-1]이 같지 않으면 펠린드롬수 판단 문자열 변수(judge)를 "no"값으로 변경 후 break;하여 "no"를 출력하고 다음 문자를 받을 준비를 하면서, 판단 문자열 변수(judge)를 다시 "yes"로 변경 후 0이 입력 될 때까지 무한 반복한다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
char[] str;
while(true) {
String judge = "yes";
str = st.nextToken().toCharArray();
if(str[0] != '0') {
for(int i=0; i<str.length; i++) {
if(str[i] != str[str.length-i-1]) {
judge = "no";
break;
}
}
}
else {
break;
}
System.out.println(judge);
st = new StringTokenizer(br.readLine());
}
}
}