본문 바로가기
백준

[백준] 10807번 : 개수 세기 – JAVA [자바]

by Hongwoo 2022. 8. 6.
반응형

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

 

10807번: 개수 세기

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

www.acmicpc.net

 


  • 문제

 

 


  • 문제 풀이

백준 10807번 개수 세기는 브론즈 5 난이도의 구현 문제이다. 이 문제에서는 n개의 정수가 입력으로 주어진다. 그리고 정수 v가 주어졌을 때, v가 입력으로 몇 번 나왔는지를 출력하면 된다.

 

이 문제는 HashMap을 이용해서 풀 수 있다. 우선 이 HashMap의 키는 Integer, 그리고 값도 Integer형으로 저장할 것이다. Key는 입력받은 수, 그리고 값은 그 수가 몇 번 나왔는지를 저장하는 count가 될 것이다. 그리고 정수를 받을 때마다 Map에 넣어준다.

 

이 문제에서는 getOrDefault (Object Key, V defaultValue)라는 함수를 이용할 것이다. getOrDefault 함수는 찾는 키가 맵에 있으면 찾는 키의 값을 반환하고 없으면 기본 값을 반환하는 함수이다. 이 함수는 맵을 이용할 때 자주 사용하는 메서드이기 때문에 꼭 알아두는 것이 좋다. 

 

즉, 입력받은 수가 x라고 하면 map.put(x, map.getOrDefault(x, 0) + 1을 해서 저장해주면 된다. 이 코드의 뜻은 x를 맵에 저장하는데 이미 저장되어 있으면 저장되어 있는 값의 + 1을 한 값을 저장하고, 없으면 0 + 1, 즉 1을 저장하는 코드이다.

 

그리고 입력으로 주어지는 모든 수를 저장하면 v를 입력받고 map.get(v)를 출력해주면 된다. 단, v가 입력으로 주어지지 않았다면 null을 반환시키므로 map에 있는지 없는지 한번 확인해줘야 한다.

 

자세한 코드는 밑에 있다.

 


  • 코드

 

import java.io.*;
import java.util.*;

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());
        Map<Integer, Integer> map = new HashMap<>();
        StringTokenizer st = new StringTokenizer(br.readLine());
        while (st.hasMoreTokens()) {
            int m = Integer.parseInt(st.nextToken());
            //m을 map에 넣고 count를 1씩 증가시켜준다
            map.put(m, map.getOrDefault(m, 0) + 1);
        }
        int v = Integer.parseInt(br.readLine());
        //map에 있으면 map에 저장되어 있는 값을 출력하고 없으면 0 출력
        if (map.containsKey(v)) {
            System.out.print(map.get(v));
        } else {
            System.out.print(0);
        }

    }
}

 

 

반응형

댓글