반응형

문제 이해
신입 사원 2명이 각각 a와 b 능력치가 있을 때
민수가 가르친다면 a+b , a+b 능력치가 된다
-> 이 때 최소가 되는 값을 구하라
알고리즘
Greedy로 쉽게 풀 수 있을 것 같아서 PriorityQueue를 이용해서 풀 생각을 하였다.
Greedy가 의심될 때 가장 주의해야 할 것은 예외가 생길 수 있냐는 것이다.
전체 값이 최소가 되기 위해서는 신입 사원들 중 능력치가 제일 낮은 2명을 뽑아야하는 것이 맞으므로
Greedy로 풀 수 있다는 것을 확정지었다.
- ability를 전부 PQ에 넣어놓고 제일 낮은 값 2명을 뽑으면 되니까 람다식 없이 기본 pq를 사용함
- number을 하나씩 갈 때 마다 pq에서 2명 뽑고 그 둘을 더한 값을 다시 pq에 두번 집어넣는 것을 반복
- number가 끝났다면 pq를 비울 때까지 돌면서 answer에 더해줌
코드
import java.util.*;
class Solution {
public int solution(int[] ability, int number) {
int answer = 0;
PriorityQueue<Integer> pq = new PriorityQueue<>();
for(int a : ability){
pq.add(a);
}
for(int i = 0; i < number; i++){
int a = pq.poll();
int b = pq.poll();
int newAbil = a+b;
pq.add(newAbil);
pq.add(newAbil);
}
while(!pq.isEmpty()){
answer+=pq.poll();
}
return answer;
}
}반응형
'알고리즘' 카테고리의 다른 글
| [PCCP 모의고사 2회] 4번 보물지도 - 자바(java) (2) | 2025.08.14 |
|---|---|
| [PCCP 모의고사 2회] 3번 카페 확장 - 자바(java) (1) | 2025.08.14 |
| [PCCP 모의고사 2회] 1번 실습용 로봇 - 자바(java) (1) | 2025.08.14 |
| [백준 3078] 좋은 친구 - 자바(java) (0) | 2025.08.12 |
| [백준 2559] 수열 - 자바(java) (1) | 2025.08.11 |
