프로그래머스

LV3 야근지수 (Java)

whiporithm 2023. 11. 21. 12:07

 


 

문제

https://school.programmers.co.kr/learn/courses/30/lessons/12927

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

풀이

문제를 보고서 제곱이라는 행위에 대해 생각해보았다.

단순히 3의 제곱과 4의 제곱을 살펴만 봐도 9와 16, 약7의 차이가 나는것을 알 수 있다.

 

따라서 작은값을 0에 가깝게 만드는 행위보다, 큰 값들부터 줄여서 평균을 낮추는 방식으로 문제를 풀이해야 한다.

 

남은 일 중에 가장 큰 값을 꺼내서 일을 수행하고, 다시 넣어준다. 

이 과정을 일이 없거나, 퇴근할 때 까지 반복하면 된다.

 

최대힙을 사용하여 큰 값을 찾고, 일이 끝나지 않았다면 다시 넣어주면 된다.

 

코드

import java.util.*;

class Solution {
    public long solution(int n, int[] works) {
        long answer = 0;
        PriorityQueue<Integer> pq = new PriorityQueue<>((x, y) -> y-x);
        for(int i=0; i<works.length; i++)
            pq.add(works[i]);
       
        while(pq.peek() != null && n != 0){
            int val = pq.poll();
            val--;
            n--;
            if(val != 0) pq.add(val);
        }
        
        while(pq.peek() != null){
            int val = pq.poll();
            answer += (val * val);
        }
        
        return answer;
    }
}

 

후기

 

무난한 문제였다.

'프로그래머스' 카테고리의 다른 글

LV3 모음사전 (Java)  (1) 2023.11.23
LV3 최고의 집합 (Java)  (1) 2023.11.22
LV2 게임 맵 최단거리 (Java)  (0) 2023.11.20
LV3 네트워크 (Java)  (0) 2023.11.20
LV3 이중우선순위큐  (0) 2023.11.18