-
[프로그래머스] 야근 지수 (08.05)algorithm/프로그래머스 2020. 8. 5. 18:14
문제
https://programmers.co.kr/learn/courses/30/lessons/12927
접근법
야근지수의 최소값을 찾기위한 방법을 먼저 찾아야했다.
내가 생각한 방법은 works 배열에 있는 값들 중 남은 일의 작업량이 가장 많은 순으로 작업을 진행하는 것이다.
그렇기 위해서 남은 일의 작업량들이 역순으로 정렬이 되어있어야한다.
남은 일의 작업량의 역순을 유지하기 위해서 우선순위 큐를 사용했다.
우선순위 큐를 돌면서 최대값을 poll하고 그 값을 -1한 다음에 다시 큐로 삽입했다.
이렇게 n시간동안의 작업이 끝나면 반복문을 나가고
큐에 있는 값들을 가지고 야근 지수를 계산한다.
코드
import java.util.Comparator; import java.util.Iterator; import java.util.PriorityQueue; class Solution { public long solution(int n, int[] works) { long answer = 0; PriorityQueue<Integer> pq = new PriorityQueue<>(Comparator.reverseOrder()); for(int work : works) pq.offer(work); while(n>0){ n --; int max = pq.poll(); if(max == 0) break; pq.offer(--max); } Iterator<Integer> iterator = pq.iterator(); while(iterator.hasNext()){ answer += Math.pow(iterator.next(), 2); } return answer; } }
'algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 최고의 집합 (08.07) (0) 2020.08.07 [프로그래머스] 줄 서는 방법 (08.06) (0) 2020.08.06 [프로그래머스] 불량 사용자 (08.04) (0) 2020.08.04 [프로그래머스] 방문길이 (08.02) (0) 2020.08.02 [프로그래머스] 멀리 뛰기 (08.01) (0) 2020.08.01