https://www.acmicpc.net/problem/10807
- 문제
- 문제 풀이
백준 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);
}
}
}
'백준' 카테고리의 다른 글
[백준] 2875번 : 대회 or 인턴 – JAVA [자바] (0) | 2022.08.07 |
---|---|
[백준] 2010번 : 플러그 – JAVA [자바] (0) | 2022.08.07 |
[백준] 5597번 : 과제 안 내신 분..? – JAVA [자바] (0) | 2022.08.06 |
[백준] 10170번 : NFC West vs North – JAVA [자바] (0) | 2022.08.06 |
[백준] 10992번 : 별 찍기 - 17 – JAVA [자바] (0) | 2022.08.06 |
댓글