문제 설명
앞에서부터 읽을 때와 뒤에서부터 읽을 때 똑같은 단어를 팰린드롬(palindrome)이라고 합니다. 예를들어서 racecar, 10201은 팰린드롬 입니다.
두 자연수 n, m이 매개변수로 주어질 때, n 이상 m 이하의 자연수 중 팰린드롬인 숫자의 개수를 return 하도록 solution 함수를 완성해 주세요.
제한사항
m은 500,000이하의 자연수이며, n은 m 이하의 자연수입니다.
입출력 예
n | m | result |
1 | 100 | 18 |
100 | 300 | 20 |
문제풀이
/*
팰랜드롬이 가진 대칭성에 초점을 두어 인덱스를 탐색하여 해당 값이 같은지 비교하는 문제이다.
m의 값은 최대 500,000 이므로 고려해야 할 자릿수는 최소 1자리, 최대 6자리로 상정한다.
*/
class Solution {
public int cntPalindrome (int n, int m) {
int answer = 0; // 팰린드롬의 갯수 초기 값
for (int i = n; i <= m; i++) {
String temp = Integer.toString(i);
if (temp.length() == 1) { // 1자리 수 (ex. 3)
answer++;
} else if((temp.length() == 2)
&& (temp.charAt(0) == temp.charAt(1))) { // 2자리 수 (ex. 22)
answer++;
} else if((temp.length() == 3)
&& (temp.charAt(0) == temp.charAt(2))) { // 3자리 수 (ex. 232)
answer++;
} else if((temp.length() == 4)
&& (temp.charAt(0) == temp.charAt(3))
&& (temp.charAt(1) == temp.charAt(2))) { // 4자리 수 (ex. 2442)
answer++;
} else if((temp.length() == 5)
&& (temp.charAt(0) == temp.charAt(4))
&& (temp.charAt(1) == temp.charAt(3))) { // 5자리 수 (ex. 24342)
answer++;
} else if((temp.length() == 6)
&& (temp.charAt(0) == temp.charAt(5))
&& (temp.charAt(1) == temp.charAt(4))
&& (temp.charAt(2) == temp.charAt(3))) { // 6자리 수 (ex. 244442)
answer++;
} else {
continue;
}
}
return answer;
}
}
후기
다중 if문의 조건에서 인덱스의 위치를 직접 지정하는게 아닌 특정 규칙으로 첫 번째와 마지막 인덱스를 비교하는 등 좀 더 좋은 방식의 코드로 수정할 수 있을거 같다...
최근댓글