[PCCP모의고사2] 2번 신입사원 교육 JAVA
문제 (우선순위 큐)
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 풀이
처음에는 Arrays.sort() 사용하여 매번 반복해서 정렬 후 앞 2개를 뽑아내서 더해줬었다.
시간초과 날 것 같긴했는데 역시나..ㅎ 제일 작은 수를 뽑아내기 위해 정렬말고 다른 자료 구조를 써야 효과적으로 뽑아낼 수 있을까 고민했는데 결국에는 구글링을 통해 Priority Queue(우선순위큐) 를 이용해야 한다는 것을 알게 되었다.
우선순위큐 자체는 자바에 내장되어 있는 자료구조를 바로 이용하면 되서 구현은 참 쉬웠지만 내부적인 원리를 이해하려면 조금 각잡고 트리 공부를 해야할 것 같았다.
참고 사이트:https://velog.io/@gillog/Java-Priority-Queue%EC%9A%B0%EC%84%A0-%EC%88%9C%EC%9C%84-%ED%81%90
https://devkingdom.tistory.com/226
[JAVA] JAVA 메모리 이야기 - Stack 과 Heap
하이.. ! 어느날 회사의 누군가 Java의 메모리가 어떻게 관리되는지에 대해서 물어봤다. 대답이 많이 나오지 않았다... 나름대로 Java를 제일 잘한다고 생각했었고, 자신감도 있던 상태라 충격이 컸
devkingdom.tistory.com
[Java] Priority Queue(우선 순위 큐)
PriorityQueue란 우선순위 큐로써 일반적인 큐의 구조 FIFO(First In First Out)를 가지면서, 데이터가 들어온 순서대로 데이터가 나가는 것이 아닌 우선순위를 먼저 결정하고 그 우선순위가 높은 데이터
velog.io
소스 코드
import java.util.Arrays;
import java.util.PriorityQueue;
class Solution {
public int solution(int[] ability, int number) {
PriorityQueue<Integer> pq = new PriorityQueue<>();
int ans = 0;
for(int a : ability)
pq.add(a);
for(int i = 0; i < number; i++) {
int sum = pq.poll();
sum += pq.poll();
pq.add(sum);
pq.add(sum);
}
for(int i = 0; i < ability.length; i++)
ans += pq.poll();
return ans;
}
}