알고리즘

백준 14912 숫자 빈도수

킨글 2024. 7. 23. 20:52

설명

입력 받은 후 문자를 char로 생각하고 모두 map에 넣어서 계산하도록 했다. 

마지막에 int인 d를 map.getOrDefault(d, 0)하게되면 d는 int이고 map의 key는 Character여서 인식이 안되었다. 

그래서 (char)d도 해보았지만 Character '1'이 처리되는게 아니라 '\u0001' 1으로 표시가 되는 문제가 있었다.

아래와 같이 forDigit을 한 후에 10진수로 바꿔주면 원하는 대로 작동을 하게 되어서 해결할 수 있었다. 

char c = Character.forDigit(d, 10);

 

코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;

public class Main {

    // 14912
    public static void main(String[] args) throws IOException {
        process();
    }

    private static void process() throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        StringTokenizer st = new StringTokenizer(br.readLine());
        int n = Integer.parseInt(st.nextToken());
        int d = Integer.parseInt(st.nextToken());
        Map<Character, Integer> map = new HashMap<>();
        for (int i = 1; i <= n; i++) {
            String s = String.valueOf(i);
            for (int j = 0; j < s.length(); j++) {
                char c = s.charAt(j);
                map.put(c, map.getOrDefault(c, 0)+1);
            }
        }

        char c = Character.forDigit(d, 10);
        bw.write(map.getOrDefault(c, 0) +"");
        bw.flush();
        bw.close();
        br.close();
    }
}