๋ ๋งต๊ฒ (with.Java)
โ๋ ๋งต๊ฒ (with.Java)โ ๋ฌธ์ ์ ๋ํ์ฌ ์์๋ณธ ๊ธ์ ๋๋ค.
์ฝ๋ฉ ํ ์คํธ ๋ฌธ์ ๋ฅผ ํ๋ฉฐ, ํ์๋ ๋ฌธ์ ์ ๋ํ ํ๊ณ ์ ๋ค๋ฅธ ํ์ด ๋ฐฉ๋ฒ์ ์์๋ณด๋ฉฐ, ์์๊ฐ๊ณ ์ ํฉ๋๋ค.
๋ฌธ์ ์ ๋ํด ๋จผ์ ์์๋ณด๊ฒ ์ต๋๋ค.
๋ฌธ์
๋งค์ด ๊ฒ์ ์ข์ํ๋ Leo๋ ๋ชจ๋ ์์์ ์ค์ฝ๋น ์ง์๋ฅผ K ์ด์์ผ๋ก ๋ง๋ค๊ณ ์ถ์ต๋๋ค.
๋ชจ๋ ์์์ ์ค์ฝ๋น ์ง์๋ฅผ K ์ด์์ผ๋ก ๋ง๋ค๊ธฐ ์ํด Leo๋ ์ค์ฝ๋น ์ง์๊ฐ ๊ฐ์ฅ ๋ฎ์ ๋ ๊ฐ์ ์์์ ์๋์ ๊ฐ์ด ํน๋ณํ ๋ฐฉ๋ฒ์ผ๋ก ์์ด ์๋ก์ด ์์์ ๋ง๋ญ๋๋ค.
์์ ์์์ ์ค์ฝ๋น ์ง์ = ๊ฐ์ฅ ๋งต์ง ์์ ์์์ ์ค์ฝ๋น ์ง์ + (๋ ๋ฒ์งธ๋ก ๋งต์ง ์์ ์์์ ์ค์ฝ๋น ์ง์ * 2)
Leo๋ ๋ชจ๋ ์์์ ์ค์ฝ๋น ์ง์๊ฐ K ์ด์์ด ๋ ๋๊น์ง ๋ฐ๋ณตํ์ฌ ์์ต๋๋ค.
Leo๊ฐ ๊ฐ์ง ์์์ ์ค์ฝ๋น ์ง์๋ฅผ ๋ด์ ๋ฐฐ์ด scoville๊ณผ ์ํ๋ ์ค์ฝ๋น ์ง์ K๊ฐ ์ฃผ์ด์ง ๋, ๋ชจ๋ ์์์ ์ค์ฝ๋น ์ง์๋ฅผ K ์ด์์ผ๋ก ๋ง๋ค๊ธฐ ์ํด ์์ด์ผ ํ๋ ์ต์ ํ์๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ์ฌํญ
- scoville์ ๊ธธ์ด๋ 2 ์ด์ 1,000,000 ์ดํ์ ๋๋ค.
- K๋ 0 ์ด์ 1,000,000,000 ์ดํ์ ๋๋ค.
- scoville์ ์์๋ ๊ฐ๊ฐ 0 ์ด์ 1,000,000 ์ดํ์ ๋๋ค.
- ๋ชจ๋ ์์์ ์ค์ฝ๋น ์ง์๋ฅผ K ์ด์์ผ๋ก ๋ง๋ค ์ ์๋ ๊ฒฝ์ฐ์๋ -1์ return ํฉ๋๋ค.
์ ์ถ๋ ฅ ์์
scoville | K | return |
---|---|---|
[1, 2, 3, 9, 10, 12] | 7 | 2 |
๋ฌธ์ ์ ๋ํ ๋์ ํ์ด
import java.util.PriorityQueue;
class Solution {
public int solution(int[] scoville, int K) {
PriorityQueue<Integer> que = new PriorityQueue<>();
for(int i : scoville){
que.add(i);
}
int answer = 0;
while(que.peek() < K){
que.add(que.poll() + (que.poll() * 2));
answer++;
if(que.size() == 1 && que.peek() < K){
return -1;
}
}
return answer;
}
}
ํ์ด ๋ฆฌ๋ทฐ
solution ๋ฉ์๋๋ ๋ ๊ฐ์ ๋ฐฐ์ด progresses์ speeds๋ฅผ ์ ๋ ฅ์ผ๋ก ๋ฐ์ต๋๋ค.
์์ ์ ์งํ ์ํฉ๊ณผ ์๋๋ฅผ ์ด์ฉํ์ฌ ๊ฐ ์์ ์ด ์๋ฃ๋๋ ๋ฐ ํ์ํ ์ผ ์๋ฅผ ๊ณ์ฐํฉ๋๋ค.
Queue
์ฒซ ๋ฒ์งธ for ๋ฃจํ๋ฅผ ํตํด ๊ฐ ์์ ์ ๋ํด ํ์ํ ์ผ ์๋ฅผ ๊ณ์ฐํ๊ณ , ์ด๋ฅผ que์ ์ ์ฅํฉ๋๋ค. ๋ง์ฝ ์๋์ ๋ฐ๋ผ ์์ ์๋ฃ๊น์ง ๊ฑธ๋ฆฌ๋ ์ผ ์๊ฐ ์์์ ์ผ๋ก ๋๋์ด ๋จ์ด์ง์ง ์์ผ๋ฉด ์ฌ๋ฆผํ์ฌ ๊ณ์ฐํฉ๋๋ค.
compare ๋ณ์์ ์ฒซ ๋ฒ์งธ ์์ ์ ํ์ํ ์ผ ์๋ฅผ ์ ์ฅํ๊ณ , count ๋ณ์๋ฅผ ์ด๊ธฐํํฉ๋๋ค.
๋ ๋ฒ์งธ while ๋ฃจํ๋ฅผ ํตํด que๊ฐ ๋น ๋๊น์ง ๋ฐ๋ณตํ๋ฉฐ ๊ฐ ์์ ์ ์๋ฃ๊น์ง ๊ฑธ๋ฆฌ๋ ์ผ ์๋ฅผ ๋น๊ตํ์ฌ ์ฒ๋ฆฌํฉ๋๋ค.
compare์ ํ์ฌ ์์ ์ ํ์ํ ์ผ ์๋ฅผ ๋น๊ตํ์ฌ ์๊ฑฐ๋ ๊ฐ์ผ๋ฉด ์์ ์ ์๋ฃํ์ผ๋ฏ๋ก count๋ฅผ ์ฆ๊ฐ์ํค๊ณ que์์ ์์ ์ ์ ๊ฑฐํฉ๋๋ค.
๊ทธ๋ ์ง ์์ผ๋ฉด ์๋ก์ด ์์ ์ด ์์๋์์ผ๋ฏ๋ก list์ ํ์ฌ๊น์ง ์๋ฃ๋ ์์ ์ ์๋ฅผ ์ถ๊ฐํ๊ณ count๋ฅผ ์ด๊ธฐํํฉ๋๋ค. ๋ํ compare๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค.
๋ง์ง๋ง์ผ๋ก list์ ์ ์ฅ๋ ๊ฐ์ ๋ฐฐ์ด๋ก ๋ณํํ์ฌ ๋ฐํํฉ๋๋ค.
์ด ์ฝ๋๋ ๊ฐ ์์ ์ด ์๋ฃ๋๋ ๋ฐ ํ์ํ ์ผ ์๋ฅผ ๊ณ์ฐํ๊ณ , ๊ฐ ๋ ์ง๋ณ๋ก ์๋ฃ๋๋ ๊ธฐ๋ฅ์ ์๋ฅผ ๊ณ์ฐํ์ฌ ๋ฐํํ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค.
๋ฐฐ์ด๋ก๋ ํ์ด๋ณด๊ฒ ์ต๋๋ค.
๋ฌธ์ ์ ๋ํ ๋์ ํ์ด
import java.util.ArrayList;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
ArrayList<Integer> list = new ArrayList<>();
int day = 0;
int count = 1;
int idx = 0;
for(int i = 0; i < progresses.length; i++){
if(day * speeds[i] + progresses[i] >= 100){
count++;
}else if(i != 0){
list.add(count);
count = 1;
}
int temp = 100 - progresses[i];
if(temp % speeds[i] == 0){
int temp2 = temp / speeds[i];
if(day < temp2){
day = temp2;
}
}else{
int temp2 = temp / speeds[i] + 1;
if(day < temp2){
day = temp2;
}
}
}
if(day * speeds[progresses.length - 1] + progresses[progresses.length - 1] >= 100){
list.add(count);
}
int[] answer = new int[list.size()];
for(int i = 0; i < list.size(); i++){
answer[i] = list.get(i);
}
return answer;
}
}
ํ์ด ๋ฆฌ๋ทฐ
solution ๋ฉ์๋๋ ์ ์ ๋ฐฐ์ด scoville๊ณผ ์ ์ K๋ฅผ ์ ๋ ฅ์ผ๋ก ๋ฐ์ต๋๋ค.
์ฐ์ ์์ ํ PriorityQueue
scoville ๋ฐฐ์ด์ ๊ฐ ์์๋ฅผ ์ฐ์ ์์ ํ์ ์ฝ์ ํฉ๋๋ค.
answer ๋ณ์๋ฅผ ์ด๊ธฐํํ๊ณ , ์ค์ฝ๋น ์ง์๊ฐ K ์ด์์ด ๋ ๋๊น์ง ๋ฐ๋ณตํฉ๋๋ค.
๋ฐ๋ณต๋ฌธ ๋ด์์๋ ํ์ฌ ์ฐ์ ์์ ํ์ ๋งจ ์ ์์๊ฐ K๋ณด๋ค ์๋ค๋ฉด, ๊ฐ์ฅ ์์ ๋ ๊ฐ์ ๊ฐ์ ๊บผ๋ด์ ์์ ํ ๋ค์ ํ์ ์ฝ์ ํฉ๋๋ค. ์ด๋ ์์ ๊ฒฐ๊ณผ๋ ์ฒซ ๋ฒ์งธ ๊ฐ + (๋ ๋ฒ์งธ ๊ฐ * 2)๋ก ๊ณ์ฐ๋ฉ๋๋ค.
์์ ํ์๋ฅผ answer์ 1 ์ฆ๊ฐ์ํต๋๋ค.
๋ฐ๋ณต๋ฌธ์ด ์ข ๋ฃ๋ ๋๊น์ง ์ค์ฝ๋น ์ง์๊ฐ K ์ด์์ด ๋์ง ์์๋ค๋ฉด -1์ ๋ฐํํฉ๋๋ค.
๊ทธ๋ ์ง ์์ผ๋ฉด answer๋ฅผ ๋ฐํํฉ๋๋ค.
์ด ์ฝ๋๋ ์ฃผ์ด์ง ์กฐ๊ฑด์ ๋ฐ๋ผ ์์์ ์์ด์ผ ํ๋ ์ต์ ํ์๋ฅผ ๊ณ์ฐํ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค.