https://school.programmers.co.kr/learn/challenges?tab=algorithm_practice_kit
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
ํธ๋ ๋์ ์ฌ๊ณ ๊ณผ์ ๋ฐ ๊ฐ์ ์
import java.util.*;
class Solution {
public int solution(int[] scoville, int K) {
int answer = 0;
PriorityQueue<Integer> pq = new PriorityQueue();
for(int i: scoville){
pq.add(i);
} // ๊ธฐ๋ณธ์ด min heap
int s = 0;
while(s<K){
if(pq.isEmpty()){
answer = -1;
break;
}
int easy = pq.poll();
int eeasy = pq.poll();
s = easy + (2*eeasy);
answer++;
}
return answer;
}
}
์ฒ์์ ๋ฌธ์ ์ดํด๋ฅผ ์์ ํ ์๋ชปํ๋ค. ๋ชจ๋ ์์์ ์ค์ฝ๋น์ง์๊ฐ K์ด์์ด ๋์ด์ผํ๋ค.
import java.util.*;
class Solution {
public int solution(int[] scoville, int K) {
int answer = 0;
PriorityQueue<Integer> pq = new PriorityQueue();
for(int i: scoville){
pq.add(i);
} // ๊ธฐ๋ณธ์ด min heap
while(pq.peek()<K){
if(pq.isEmpty()){
answer = -1;
break;
}
if(pq.size()>=2){
int easy = pq.poll();
int eeasy = pq.poll();
pq.add(easy + (2*eeasy)); // ์ ์์ ๋ง๋ค์ด์ ์ถ๊ฐ
answer++;
}
}
return answer;
}
}
์ด๊ฒ ์์ ํ ์ฝ๋๋ค. ์๊ฐ์ด๊ณผ๋๋ ์์ฒญ ํฐ ์ผ์ด์ค๋ฅผ ์ ์ธํ๊ณ ์ ๋ค ํต๊ณผ๋๋ค...
์กฐ๊ธ๋ง ์๊ฐํด๋ณด๋ฉด ํด๊ฒฐ๋๋ ๋ถ๋ถ์ด์๋ค. K ์ด์์ผ๋ก ์์์ ๋ง๋ค๋ฉด ๋๋๊น minheap์ ๋ฝ์์ ๋ K์ด์์ธ ๊ฒฝ์ฐ break๋ฅผ ์ค๋ฒ๋ฆฌ๋ ๊ฒ์ด๋ค.
import java.util.*;
class Solution {
public int solution(int[] scoville, int K) {
int answer = 0;
PriorityQueue<Integer> pq = new PriorityQueue();
for(int i: scoville){
pq.add(i);
} // ๊ธฐ๋ณธ์ด min heap
while(pq.peek()<K){
if(pq.size()>=2){
int easy = pq.poll();
int eeasy = pq.poll();
pq.add(easy + (2*eeasy)); // ์ ์์ ๋ง๋ค์ด์ ์ถ๊ฐ
answer++;
}else{
answer = -1;
break;
}
if(pq.peek() >= K) break;
}
return answer;
}
}
pq ์ฌ์ด์ฆ๋ก break ์กฐ๊ฑด๋ ๋ฐ๊ฟ์ ๋ฃ์ด๋ดค๋ค.
# ์ถ๊ฐ ๊ณต๋ถ
`PriorityQueue` ํ์ฉํ๊ธฐ
๊ธฐ๋ณธ์ด minheap์ด๋ค ๊ทธ๋์ reverseOrderํด๋ฒ๋ฆฌ๋ฉด maxheap์ด ๋๋ค.
PriorityQueue<Integer> maxHeap = new PriorityQueue(Collections.reverseOrder());
PriorityQueue<Integer> maxHeap = new PriorityQueue((o1, o2)-> {return o2-o1;});
์๋ฃ๊ตฌ์กฐ๋ฅผ ๋ค๋ฅธ๊ฑธ ์ฌ์ฉํ ๋๋ ์ด๋ ๊ฒ๋ ์ธ ์ ์๋ค.
PriorityQueue<Student> pq = new PriorityQueue<>((s1, s2) -> {
if (s1.grade == s2.grade) {
return s1.name.compareTo(s2.name);
}
return s2.grade - s1.grade;
});
๊ทธ๋ฆฌ๋ํ ๋ฌธ์ ๋ฅผ ํ ๋ ์ด๋ ๊ฒ ํ๊ณค ํ๋ค.
๋์์ด ๋๋ค๋ฉด ๋๊ธ์ด๋ ๊ณต๊ฐ ๋ฒํผ ํ ๋ฒ์ฉ ๋๋ฅด๊ณ ๊ฐ์ฃผ์ธ์!
'OJ๐ผ > Programmers ๊ณ ๋์ ํท' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[LV.2][JAVA] ์ฌ๋ฐ๋ฅธ ๊ดํธ (0) | 2024.08.28 |
---|---|
[LV.3][JAVA] ๋ฒ ์คํธ ์จ๋ฒ (0) | 2024.08.27 |
[LV.2][JAVA] ์ ํ๋ฒํธ ๋ชฉ๋ก (0) | 2024.08.25 |
[LV.1][JAVA] ์์ฃผํ์ง ๋ชปํ ์ ์(feat. TreeMap) (0) | 2024.08.25 |
[LV.1][JAVA] ํฐ์ผ๋ชฌ(feat. TreeSet ์์๋ณด๊ธฐ) (0) | 2024.08.25 |