1. 수들의 합 4 - 골드 4
출처 - https://www.acmicpc.net/problem/2015
Sol) 스터디원 코드 JW - 440 ms
java
열기
- ex) 현재 합 (sum) = 10, target(K) = 3인 경우
- keySet에 7 (= 10 - 3)이 존재한다면
- {더해서 10이 되는 원소들} - {더해서 7이 되는 원소들} = {남은 원소들}
- {남은 원소들} 의 합은 K가 될 것이다.
- 따라서 result += map.get(sum - K)를 해준다.
- map의 초깃값으로 (0, 1)을 넣어준다. ?????????
- sum = 5, K = 5 인 경우
- sum - K = 0
- 따라서, 이 경우를 위해 map.put(0, 1)를 초깃값으로 넣어줘야한다. ???
- (어느 부분합도 K가 아닌 경우와 같은) 예외 상황이 없기 때문에 1을 초깃값으로 넣어줘야 되는 건가?
- result를 int형으로 설정하는 경우 66%까지 가다가 오답이 난다.
- 로직은 모두 맞는데 result가 int의 범위를 넘어가는 경우가 있을 수 있어서 long으로 설정해야한다.
- N 20만 이하, K은 20억 이하라는 조건이 있다.
- map의 keySet에 sum - K가 존재하는 경우, result 에 map.get(sum - K) 를 해서 더해주는데 더하다가 INT 범위를 넘을 때 오류가 나는 걸로 보인다.
- 따라서 이 부분만 long으로 바꿔주면 된다.
- 문제 이해하고 정리하는데 3시간 넘게 걸렸다 .ㅎㅎㅎ ㅠ
'자료구조와 알고리듬 With Java > [Study] BAEKJOON 프로그래머스 CodeUp LeetCode' 카테고리의 다른 글
[12월 1주차] 알고리즘 스터디 (0) | 2022.12.05 |
---|---|
[11월 3주차] 알고리즘 스터디 (0) | 2022.11.21 |
[09월 1주차] 알고리즘 스터디 (0) | 2022.09.05 |
2022-08-28 [11회차] 알고리즘 스터디 (0) | 2022.08.28 |
2022-08-03 [9회차] 알고리즘 스터디 (0) | 2022.08.03 |