[프로그래머스] 모의테스트 팰린드롬 개수 구하기
문제 설명
앞에서부터 읽을 때와 뒤에서부터 읽을 때 똑같은 단어를 팰린드롬(palindrome)이라고 합니다. 예를들어서 racecar, 10201은 팰린드롬 입니다.
두 자연수 n, m이 매개변수로 주어질 때, n 이상 m 이하의 자연수 중 팰린드롬인 숫자의 개수를 return 하도록 solution 함수를 완성해 주세요.
제한사항
- m은 500,000이하의 자연수이며, n은 m 이하의 자연수입니다.
입출력 예
입출력 예 설명
입출력 예 #1
1 이상 100 이하의 팰린드롬은 다음과 같이 18개가 있습니다.
1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 22, 33, 44, 55, 66, 77, 88, 99
입출력 예 #2
100 이상 300 이하의 팰린드롬은 다음과 같이 20개가 있습니다.
101, 111, 121, 131, 141, 151, 161, 171, 181, 191, 202, 212, 222, 232, 242, 252, 262, 272, 282, 292
풀이방법: 주어진 숫자를 String으로 변환해서 길이의 반만큼 자른다
예를들어 1001인 경우 String 으로 변환시 length가 4 , 반으로 자르면 2
그러면 반으로 자른길이까지 앞에서부터랑 뒤에서부터 서로 일치하면 true고 아니면 false로 판단해
true인것만 카운트를 센다
ex) 팰린드롬인지 판단해야 하는 숫자가 1)1001 인경우 length/2 = 20번째인덱스(1) 이랑 3번째인덱스(1) 비교
1번째인덱스(0) 이랑 2번째인덱스(0) 비교
2)12321 인 경우 length/2 = 2
0번째인덱스(1) 이랑 3번째인덱스(1) 비교
1번째인덱스(2) 이랑 2번째인덱스(2) 비교
그러면 끗
3)123501 인 경우 length/2 = 3
0번째인덱스(1) 이랑 5번째인덱스(1) 비교
1번째인덱스(2) 이랑 4번째인덱스(0) 비교 <ㅡㅡ 여기서 서로 다르므로 break !! 팰린드롬 아님!!
2번째인덱스(3) 이랑 3번째인덱스(5) 비교
위의 예시를 토대로 팰린드롬 검사함수를 짜보면
private boolean check(String str){
boolean isPalindrome=true;
for(int i=0;i<str.length()/2;i++){
if(str.charAt(i)!=str.charAt(str.length()-i-1)){
isPalindrome=false;
break;
}
}
return isPalindrome;
}
위 코드에서 인덱스를 비교하는 if부분을 잘 맞게 짜는게 포인트인듯
**전체코드**
class Solution{
private boolean check(String str){
boolean isPalindrome=true;
for(int i=0;i<str.length()/2;i++){
if(str.charAt(i)!=str.charAt(str.length()-i-1)){
isPalindrome=false;
break;
}
}
return isPalindrome;
}
public int solution(int n,int m){
int answer=0;
for(int i=n;i<=m;i++){
String num=Integer.toString(i);
if(check(num)==true)
answer++;
}
return answer;
}