본문 바로가기
알고리즘/백준

(백준/자바) 힌트문제1 05. 해시테이블 - 백준 10807번 문제 : 개수 세기

by son_i 2023. 7. 18.
728x90

10807번: 개수 세기 (acmicpc.net)

 

10807번: 개수 세기

첫째 줄에 정수의 개수 N(1 ≤ N ≤ 100)이 주어진다. 둘째 줄에는 정수가 공백으로 구분되어져있다. 셋째 줄에는 찾으려고 하는 정수 v가 주어진다. 입력으로 주어지는 정수와 v는 -100보다 크거

www.acmicpc.net

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

public class Hashtable_05 {
    public static void main(String args[]) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        Hashtable <Integer,Integer>ht = new Hashtable();

        int N = Integer.parseInt(br.readLine());

        StringTokenizer st = new StringTokenizer(br.readLine());
        for (int i = 0; i < N; i++) {
            int num = Integer.parseInt(st.nextToken());
            ht.put(num, ht.getOrDefault(num,0)+1);
        }
        int result = Integer.parseInt(br.readLine());
        System.out.println(ht.getOrDefault(result,0));
    }
}

Hashtable을 이용해서 풀었다.

getOrDefault 메소드를 처음 알게됐을 땐 너무 어려웠는데 이것만큼 편리한게 없는 것 같다.

전에 이 문제를 풀었을 땐 배열로 입력된 숫자를 죄다 배열에 저장해놓고 갯수 찾을 숫자를 입력받으면 배열을 다 돌아서 cnt를 올려가며 갯수를 셌는데 Hashtable을 이용하는게 훨씬 간단하다.

 

다만 문제를 보고 자료구조를 떠올릴 수 있어야말이징...