개발 기록일지

[프로그래머스] 모의테스트 팰린드롬 개수 구하기 본문

프로그래밍/알고리즘 풀기

[프로그래머스] 모의테스트 팰린드롬 개수 구하기

JuoDev 2022. 10. 12. 23:31

문제 설명

 

앞에서부터 읽을 때와 뒤에서부터 읽을 때 똑같은 단어를 팰린드롬(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;
}