본문 바로가기

백준/JAVA

[JAVA] 백준_10816

[문제]

10816번: 숫자 카드 2 (acmicpc.net)

 

10816번: 숫자 카드 2

첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10,0

www.acmicpc.net

[풀이]

문제 의도는 이분정렬이나 HashMap 알고리즘을 쓰는 것이었다. 그래서 이분정렬을 이용한 풀이와 HashMap을 이용한 풀이 둘 다 해보았다. 개인적으로는 HashMap을 이용하는 것이 더 쉬웠다. (시간도 더 빨랐다.)

이분정렬 풀이에서는 상한과 하한을 잡는 것이 중요했다. 따라서 하한을 구하는 lower 메소드와 상한을 구하는 upper 메소드를 따로 두어 메인 함수에 적용시켰다. 

 

[백준] 10816번 : 숫자 카드 2 - JAVA [자바] (tistory.com)

 

[백준] 10816번 : 숫자 카드 2 - JAVA [자바]

https://www.acmicpc.net/problem/10816 10816번: 숫자 카드 2 첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드

st-lab.tistory.com

이 분의 풀이를 참고했기 때문에 이 게시물에 더 자세하게 설명되어 있다.

 

HashMap을 이용한 풀이에서는 getOrDefault (Object key, Object defaultValue) 라는 새로운 메소드를 알게 되어 이 메소드를 이용해 풀이하였다. map 엘리먼트의 key를 '입력받은 숫자'로 놓고 value는 '그 숫자의 개수'로 놓았다. getOrDefault를 이용해, 만약 이미 map 객체 엘리먼트 key에 해당 숫자가 있으면 그 숫자에 매핑된 value값을 가져와서 +1 하여 새롭게 put 하고 만약 숫자가 없으면 출력 시 0을 defaultValue로 놓아 0이 출력되도록 한다. 

 

1. 이분정렬 풀이

2. HashMap 풀이

위에서부터 순서대로 HashMap, 이분정렬 풀이이다.

'백준 > JAVA' 카테고리의 다른 글

[JAVA] 백준_1269  (0) 2023.08.12
[JAVA] 백준_1764  (0) 2023.08.11
[JAVA] 백준_1620  (0) 2023.08.05
[JAVA] 백준_7785  (0) 2023.08.04
[JAVA] 백준_10815  (0) 2023.08.03