문제 설명

0 ~ N까지 수를 나열했을 때 숫자 K가 몇 번이나 자릿수로 등장하는지 확인하는 프로그램을 구현하세요.

K의 등장 횟수이기 때문에 K가 1인 경우 111에서는 1이 3번 등장했다고 보고, 결과에 3을 추가해야 합니다.


입력 형식

· N : 확인하고자 하는 마지막 숫자

· K : 몇 번 등장하는지 확인할 숫자


출력 형식

· K가 자릿수로 등장한 횟수를 정수로 반환


제약 사항

· 1 <= N <= 100000

· 0 <= K <= 9


입출력 예시

· 입력

  · N = 25

  · K = 2

· 출력 : 9

· 설명 : 2가 등장하는 숫자는 2, 12, 20, 21, 22, 23, 24, 25로, 총 9번이 된다. (22에는 2번 등장하는 점에 유의)


작성 코드

class Solution241 {
    public int solution(int N, int K) {

        int count = 0;
        for (int i = 0; i <= N; i++) {
            String str = Integer.toString(i); // 숫자를 문자열로 변환
            for (int j = 0; j < str.length(); j++) {
                // K와 같은 숫자가 등장하면 count 증가
                if (str.charAt(j) == Character.forDigit(K, 10)) {
                    count++;
                }
            }
        }
        return count;
    }

    public static void main(String[] args) {
        Solution241 st = new Solution241();
        int N = 25;
        int K = 2;
        System.out.println(st.solution(N, K));
        int N2 = 111;
        int K2 = 1;
        System.out.println(st.solution(N2, K2));
    }
}

 

정답 코드

class Solution {
    public int solution(int N, int K) {
        int count = 0;
        int nLen = String.valueOf(N).length();
        for (int i = 0; i < nLen; i++) {
            count += countDigit(N, i, K);
        }
        return count;
    }

    int countDigit(int number, int d, int K) {
        int power = 1;
        for (int i = 0; i < d; i++) {
            power *= 10;
        }
        int nextPower = power * 10;
        int right = number % power;

        int down = number - number % nextPower;
        int up = down + nextPower;

        int digit = (number / power) % 10;
        if (digit < K) {
            return down / 10;
        } else if (digit == K) {
            return down / 10 + right + 1;
        } else {
            return up / 10;
        }
    }

    public static void main(String[] args) {
        Solution st = new Solution();
        int N = 25;
        int K = 2;
        System.out.println(st.solution(N, K));
        int N2 = 111;
        int K2 = 1;
        System.out.println(st.solution(N2, K2));
    }
}