Notice
Recent Posts
Recent Comments
Link
HwangHub
[Java/Map] 코드트리. 두 수의 합 본문
코드트리 | 코딩테스트 준비를 위한 알고리즘 정석
국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.
www.codetree.ai
🤔 Intuition
주어지는 숫자의 범위가 넓으므로 해시맵을 활용하여 좌표를 압축해야 할 것으로 봤다.
두 수의 합이 k가 되는가를 구하기 위해서는 각 숫자의 개수끼리 곱해주고, 동일한 숫자에 대하여는 조합 공식을 이용하여 개수를 구해줬다.
🔎 Algorithm & Complexity
* @algorithm hash-map
* @time O(N) : 키 개수만큼 순회
* @memory O(N) : 키-값 쌍 개수
👨🏻💻 Logic
1. 각 숫자별로 몇 개씩 존재하는지 hashmap에 저장
2. key pair끼리 곱하여 경우의 수 연산 + key가 동일한 경우(3 + 3 = 6과 같은 경우)에는 조합 공식을 이용하여 연산
import java.io.*;
import java.util.*;
/**
* 결국 경우의 수 문제
* 내가 알아야 하는 건, 해당 숫자가 몇 개씩 있는가?
*
* 맵에 <key : value = 숫자 : 개수> 넣어두고, keySet() 순회하면서 경우의 수 세주고, visited 관리해서 pass 할 거 패스해주자.
* 이 때, 주어지는 숫자의 범위가 20억이므로 배열로 visited 관리가 불가능. 따라서 visited를 map으로 관리해주자.
*/
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
Map<Integer, Integer> map = new HashMap<>();
Map<Integer, Boolean> visited = new HashMap<>();
int n = Integer.parseInt(st.nextToken());
int k = Integer.parseInt(st.nextToken());
st = new StringTokenizer(br.readLine());
for (int i = 0; i < n; i++) {
int key = Integer.parseInt(st.nextToken());
map.put(key, map.getOrDefault(key, 0) + 1); // 개수 먼저 count
visited.put(key, false);
}
int ans = 0;
for (Integer key : map.keySet()) {
if (!visited.getOrDefault(key, true) && !visited.getOrDefault(k - key, true)) {
int a = map.getOrDefault(key, 0);
int b = map.getOrDefault(k - key, 0);
if (key != k - key) {
ans += a * b;
} else {
ans += a * (a - 1) / 2;
}
visited.put(key, true);
visited.put(k- key, true);
}
}
System.out.println(ans);
}
}
'workspace > 알고리즘' 카테고리의 다른 글
[Java/Topological Sort] 백준 2252. 줄세우기 (0) | 2024.03.22 |
---|---|
[Java/다익스트라] 백준 13549. 숨바꼭질3 (0) | 2024.03.21 |
[Java/BFS] 소프티어. 안전운전을 도와줄 차세대 지능형 교통시스템 (2) | 2024.03.19 |
[Java/BFS] 소프티어. 나무섭지 (0) | 2024.03.14 |
[Java/Simulation] 백준 16236. 아기상어 (0) | 2024.03.13 |
Comments