백준

[백준 10807번][Java][HashMap] 개수 세기

dbssk 2023. 3. 20. 19:30

https://www.acmicpc.net/problem/10807

풀이

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());

        String same = "";
        StringTokenizer st = new StringTokenizer(br.readLine());
        String find = br.readLine();
        int count = 0;
        for (int i = 0; i < n; i++) {
             same = st.nextToken();
             if (find.equals(same)) {
                 count++;
             }
        }

        System.out.println(count);
    }
}
  • 해시 맵을 이용하여 다시 풀었다.
    • containsKey(key): 해당 key값이 있는지 확인
    • replace(key, value): 해당 key값에 들어있던 value를 새로운 값으로 변경
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        StringTokenizer st = new StringTokenizer(br.readLine());
        int target = Integer.parseInt(br.readLine());

        HashMap<Integer, Integer> map = new HashMap<>();

        while (st.hasMoreTokens()) {
            int i = Integer.parseInt(st.nextToken());
            if (map.containsKey(i)) {
                map.replace(i, map.get(i) + 1);
            } else {
                map.put(i, 1);
            }
        }

        System.out.println(map.get(target));
    }
}
  • 마지막 프린트 부분에서 target과 같은 key값이 없으면 null이 프린트 되는 오류 발생
  • getOrDefault(key, defaultValue) 를 이용하여 오류 해결 -> 지정된 키로 매핑된 값이 없는 경우 0을 반환
System.out.println(map.getOrDefault(target, 0));

첫 번째 코드와 두 번째 코드 시간 차이