-
[프로그래머스] 야근 지수 (08.05)algorithm/프로그래머스 2020. 8. 5. 18:14
문제
https://programmers.co.kr/learn/courses/30/lessons/12927
코딩테스트 연습 - 야근 지수
회사원 Demi는 가끔은 야근을 하는데요, 야근을 하면 야근 피로도가 쌓입니다. 야근 피로도는 야근을 시작한 시점에서 남은 일의 작업량을 제곱하여 더한 값입니다. Demi는 N시간 동안 야근 피로도
programmers.co.kr
접근법
야근지수의 최소값을 찾기위한 방법을 먼저 찾아야했다.
내가 생각한 방법은 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