https://school.programmers.co.kr/learn/courses/30/lessons/142085
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
๋ฌธ์
- ์ฒ์์ ๋ณ์ฌ n๋ช ์ ๊ฐ์ง๊ณ ์๋ค. (1 ≤ n ≤ 1,000,000,000)
- ๋งค ๋ผ์ด๋๋ง๋ค enemy[i] ๋ง๋ฆฌ์ ์ ์ด ๋ฑ์ฅ(1 ≤ enemy[i] ≤ 1,000,000)
- enemy[i]์๋ i + 1 ๋ผ์ด๋์์ ๊ณต๊ฒฉํด์ค๋ ์ ์ ์๊ฐ ๋ด๊ฒจ์๋ค.
- ๋จ์ ๋ณ์ฌ ์ค enemy[i]๋ช ๋งํผ ์๋ชจํ์ฌ enemy[i]๋ง๋ฆฌ์ ์ ์ ๋ง์ ์ ์๋ค.
- ๋ฌด์ ๊ถ์ ์ฌ์ฉํ๋ฉด ๋ณ์ฌ์ ์๋ชจ์์ด ํ ๋ผ์ด๋์ ๊ณต๊ฒฉ์ ๋ง์ ์ ์๋ค.
- ๋ฌด์ ๊ถ์ ์ต๋ k๋ฒ ์ฌ์ฉํ ์ ์๋ค. (1 ≤ k ≤ 500,000)
- ์ต๋ ๋ช ๋ผ์ด๋๊น์ง ๋ง์ ์ ์๋์ง ๊ตฌํ๊ธฐ
์ ์ถ๋ ฅ ์์
- ์ ๋ ฅ : n = 7, k= 3, enemy = {4, 2, 4, 5, 2, 3, 1}
- ๊ฒฐ๊ณผ : 5
- 1, 3, 5 ๋ผ์ด๋์ ๊ณต๊ฒฉ์ ๋ฌด์ ๊ถ์ผ๋ก ๋ง์๋ด๊ณ , 2, 4 ๋ผ์ด๋์ ๊ฐ๊ฐ ๋ณ์ฌ๋ฅผ 2๋ช , 5๋ช ์๋ชจํ๋ฉด 5๋ผ์ด๋๊น์ง ๊ณต๊ฒฉ์ ๋ง์ ์ ์๋ค.
- 1, 3, 4๋ฒ์งธ ๊ณต๊ฒฉ์ ๋ฌด์ ๊ถ์ผ๋ก ๋ง์๋ด๊ณ , 2, 5 ๋ฒ์งธ ๊ณต๊ฒฉ์ ๊ฐ๊ฐ ๋ณ์ฌ๋ฅผ 2๋ช , 3๋ช ์๋ชจํ์ฌ 5๋ผ์ด๋๊น์ง ๊ณต๊ฒฉ์ ๋ง์ ์ ์๋ค.
ํ์ด
- ์ฌ๊ท => ์๊ฐ์ด๊ณผ
์ฒ์์ ๋ ์ค๋ฅธ ํ์ด๋ ์ฌ๊ท์๋ค. ๋ค์ ์ด๋ค ์ ๋ค์ด ์ค๋์ง ๋ชจ๋ฅด๊ณ , ์ ํํ ์ ์๋ ๊ฑด ๋ฌด์ ๊ถ์ (์ธ์ง, ์์ธ์ง) ์ด๋ค. ๊ณ์ ์ ํ์ ํ์ฌ ๋จ์ ๋ณ์ฌ๊ฐ ์๊ฑฐ๋ ๋ฌด์ ๊ถ์ ๋ค์ฐ๋ฉด ์ข ๋ฃํ๊ฒ ํ๋ค.
์ํ์๊ฐ์ด 2^n์ธ๋ฐ, n์ด ์ต๋ 100๋ง์ด๋ ์ต์ ์ ๊ฒฝ์ฐ 2^100๋ง์ด ๊ฑธ๋ฆฐ๋ค. ์๊ฐ์ด๊ณผ๊ฐ ๋๋ค.
๋ด๊ฐ ์๊ณ ์๋ ์๊ณ ๋ฆฌ์ฆ์ ๋ ์ฌ๋ฆฌ๋ฉฐ ์๊ฐ ์ด๊ณผ๋ฅผ ๋ง์ ๋ฐฉ๋ฒ์ ์๊ฐํด์ผ ํ๋๋ฐ ์ ๋ ์ค๋ฅธ๋ค.. ๊ทธ๋ฌ๋ค๊ฐ ๋ฌธ์ ์ ๊ฒ์ํ์์ ํํธ๋ฅผ ์ฐพ์ ์ ์์๋ค. (https://school.programmers.co.kr/questions/43442)
์๋ฃ๊ตฌ์กฐ๋ฅผ ์๊ฐํด์ผ ํ๋ค.
- ์ต๋ํ
- n์ด 0 ๋ฏธ๋ง์ด ๋๋ฉด, ์ด์ ๋ผ์ด๋์์ ๋ฌด์ ๊ถ์ ์จ์ ๋ค์ ์ด์๋๋ค.
- ์ฐ์ ์์ํ๋ก ๊ตฌํํ๋ค.
- ์ํ์๊ฐ : ์ฝ์
์ O(log n), ์ญ์ ๋ O(log n)
- ์ด n(log n) ์ด ๊ฑธ๋ฆฌ๋ฏ๋ก, ์ฌ๊ท๋ก ๊ตฌํํ์ ๋์ 2^n๋ณด๋ค ํจ์ฌ ์๋ค.
์ฝ๋
import java.util.*;
class Solution {
public int solution(int n, int k, int[] enemy) {
PriorityQueue<Integer> maxHeap = new PriorityQueue<>(Collections.reverseOrder()); //์ง๊ธ๊น์ง ๋ง์ ๋ณ์ฌ ์ ์ ์ฅ
int answer = 0; //์ ๋ต : ๋ช ๋ผ์ด๋๊น์ง ๋ง์ ์ ์๋์ง
for(int e : enemy) {
n -= e; //๋ณ์ฌ๋ก ๋ง์
maxHeap.add(e); //๋ง์ ๋ณ์ฌ์ ์ ์ฅ
if(n < 0) { //๋จ์ ๋ณ์ฌ๊ฐ ์๊ณ
if(k <= 0) { //๋ฌด์ ๊ถ์ด ์์ผ๋ฉด
break; //๋ผ์ด๋ ์ข
๋ฃ
}
//์์ง ๋ฌด์ ๊ถ์ด ์์ผ๋ฉด
n += maxHeap.poll(); //์ง๋์จ ๋ผ์ด๋ ์ค ๊ฐ์ฅ ๋ง์ ์ ์ ๋ค์ ๋ถํ์ํค๊ธฐ
k--; //๋ฌด์ ๊ถ ์ฌ์ฉ
}
answer++; //๋ผ์ด๋ ์ง๋จ
}
return answer;
}
}
๊ฒฐ๊ณผ
๋ฐฐ์ด์
- ์๊ฐ ๋ง์ ๋๋ ์ํ๋ง๊ณ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์๊ฐํด๋ณด๊ธฐ
- ์ต๋ํ : ์ฐ์ ์์ํ๋ฅผ ์ด์ฉํด์ ๊ตฌํํ ์ ์์
PriorityQueue<Integer> maxHeap = new PriorityQueue<>(Collections.reverseOrder());
- ์ฐ์ ์์ ํ์ ์ํ์๊ฐ : ์ฝ์ ์ O(log n), ์ญ์ ๋ O(log n)
'Algorithm > ํ๋ก๊ทธ๋๋จธ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ๋ก๊ทธ๋๋จธ์ค - ์ฃผ์ ๊ฐ๊ฒฉ (0) | 2023.08.03 |
---|---|
ํ๋ก๊ทธ๋๋จธ์ค - ๋ฏธ๋ก ํ์ถ (0) | 2023.08.02 |
ํ๋ก๊ทธ๋๋จธ์ค - ๋ฆฌ์ฝ์ณ ๋ก๋ด (0) | 2023.07.26 |
ํ๋ก๊ทธ๋๋จธ์ค - ๊ณผ์ ์งํํ๊ธฐ (0) | 2023.07.26 |
ํ๋ก๊ทธ๋๋จธ์ค - ๋ชจ์ ์ฌ์ (0) | 2023.07.25 |