처음에는 몫과 나머지 연산을 통해 풀어보려 했다만, 앞자리의 0에 대한 처리가 필요하고.. 숫자의 자리수 별로 케이스를 어떻게 나누어야 할지 감이 잘 오지 않았다. 너무 복잡할 것 같아서 다른 방법을 고민하기로 했다. (이렇게 푼 사람이 있다면 한번 보고 싶다 ㅠ.ㅠ)
숫자를 1씩 증가시키면서 하나씩 다 검사해보는 것도 시간복잡도가 크지 않을 것 같아서 시도해보았다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class BOJ_3_4096 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
while (true) {
String s = br.readLine();
if (s.equals("0")) break; // 마지막 입력 0
int len = s.length(); // 숫자의 자리 수
int num = Integer.parseInt(s); // 00012 -> 12
int cnt = 0; // 더한 횟수
while (!isPalindrome(len, num+(cnt++))) {}
sb.append(cnt-1).append('\n');
}
System.out.print(sb);
}
// 문자열을 함수 인수로 넘기자니, ++연산을 해야해서 정수로 변환
private static boolean isPalindrome(int len, int num) {
String str = String.valueOf(num);
StringBuilder sb = new StringBuilder();
// 앞에 0 추가 ex 000
for (int i = 0; i < len-str.length(); i++) {
sb.append('0');
}
// 뒤에 숫자 추가 ex 00012
sb.append(str);
str = sb.toString();
for(int i=0; i<len/2; i++) {
if(str.charAt(i)!=str.charAt(len-i-1)) return false;
}
return true;
}
}
String에서 Int, 다시 String으로 변환하는 과정에서 앞자리의 0 (ex. 00012)을 관리하는 아이디어와 방식이 재미있었다.
팰린드롬에 대해 익숙해져간다!