엄지월드

백준 14912 숫자 빈도수 본문

알고리즘

백준 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();
    }
}

'알고리즘' 카테고리의 다른 글

백준 6550 부분 문자열  (0) 2024.07.29
백준 16212 정열적인 정렬  (0) 2024.07.24
백준 14405 피카츄  (2) 2024.07.22
백준 2535 아시아 정보올림피아드  (0) 2024.07.21
백준 5555 반지  (0) 2024.07.20
Comments