-
[프로그래머스] 야근지수코딩테스트 문제풀이 2021. 10. 6. 22:51
문제
풀이
import java.util.*; class Solution { public long solution(int n, int[] works) { long answer = 0; PriorityQueue<Integer> pqWorks = new PriorityQueue<Integer>(Collections.reverseOrder()); int sum = 0; for (int work : works) { sum += work; pqWorks.offer(work); } if (n > sum) return answer; while (n > 0) { Integer maxWork = pqWorks.poll(); n--; pqWorks.offer(maxWork - 1); } answer = getOvertimeWorkingRate(pqWorks.toArray(new Integer[0])); return answer; } public long getOvertimeWorkingRate(Integer[] remainWorks) { long rate = 0; for (int remainWork : remainWorks) { rate += remainWork * remainWork; } return rate; } }
- 가장 많이 남은 일부터 1씩 뺀다.
- 이걸 array로 for문 돌려서 가장 큰 일을 찾아 -1씩 하니 효율성 시간초과.
- 우선순위큐로 구현하니 시간초과 안난다.
출처: https://programmers.co.kr/learn/courses/30/lessons/12927
'코딩테스트 문제풀이' 카테고리의 다른 글
[백준 1931] 회의실 배정 - 그리디 알고리즘 (0) 2021.10.12 [백준 1920] 수찾기 - 이분탐색 (0) 2021.10.07 [백준 2798] 블랙잭 (0) 2021.10.06 [프로그래머스] 베스트앨범 - 해시 (0) 2021.10.02 [백준 11279] 최대힙 - 우선순위 큐 (0) 2021.10.02