문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/12927
제한 사항
입출력 예
풀이
import java.util.PriorityQueue;
class Solution {
public long solution(int n, int[] works) {
long answer = 0;
PriorityQueue<Integer> result = new PriorityQueue<>((i, j) -> j - i);
for (int work : works) result.add(work);
while (n-- > 0) result.add(result.poll() - 1);
for (int work : result) if (work > 0) answer += work * work;
return answer;
}
}
후기
처음에 좀 최적화를 하려고 Map을 사용해서 각 숫자당 횟수를 카운트하는 방식으로 접근했는데 하다 보니 마지막 큐 요소에서 더 낮은 Map.Entry를 만들어야 하는 필요가 생겨서 답안 코드를 초기화했다.
그러고 나서 다시 무식한 방법으로 정렬 후 하나씩 빼보자 하고 풀어봤는데 모두 통과했다... 나름 효율성 테스트도 있었지만 뭔가 당황스럽다;;
제한 사항에서 반복하는 횟수가 적어서 통과가 가능했던 것 같다.
'코딩테스트 (프로그래머스) > Java' 카테고리의 다른 글
[프로그래머스][Java][Lv. 3] 등굣길 (0) | 2024.09.03 |
---|---|
[프로그래머스][Java][Lv. 3] 단어 변환 (0) | 2024.09.02 |
[프로그래머스][Java][Lv. 3] 주사위 고르기 (0) | 2024.08.28 |
[프로그래머스][Java][Lv. 0] 등차수열의 특정한 항만 더하기 (0) | 2024.08.25 |
[프로그래머스][Java][Lv. 0] 문자열 섞기 (0) | 2024.08.20 |