12927. 야근 지수

2025. 4. 4. 22:40·Algorithm/Programmers

문제

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

제한사항

풀이

import java.util.*;

class Solution {
    public long solution(int n, int[] works) {
        long answer = 0;
        // 최대 힙을 위한 람다 표현식을 사용한 Comparator 정의
        PriorityQueue<Integer> pq = new PriorityQueue<>((a, b) -> b - a);
        for (int work : works) {
            pq.add(work);
        }

        for (int i = 0; i < n; i++) {
            if (pq.isEmpty()) break;
            int maxWork = pq.poll();
            if (maxWork > 0) {
                pq.add(maxWork - 1);
            }
        }

        while (!pq.isEmpty()) {
            int remainingWork = pq.poll();
            answer += (long) remainingWork * remainingWork;
        }

        return answer;
    }
}

회고

야근 지수를 최소화하려면 남은 일 중 작업량이 최대인 것을 먼저 처리해야 한다. 야근 지수는 남은 작업량을 제곱하여 더하기 때문에 큰 작업량을 우선적으로 처리해야 제곱 합이 최소화될 것이다. 1시간에 작업량 1 만큼 처리할 수 있기 때문에, 1시간이 지날 때마다 남은 작업량 중 최대를 매번 찾아야 한다. 작업량 중 최대를 찾기 위해 순회(탐색) 한다면 시간 복잡도가 커질 것이다. 우선순위 큐를 이용한다면 매번 순회할 필요 없이 최대 작업량을 찾을 수 있다. 우선순위 큐는 힙 구조로 구현되었기 때문에, 삽입/삭제는 O(logn), 최대/최소 조회는 O(1) 시간 복잡도를 갖는다.

'Algorithm > Programmers' 카테고리의 다른 글

87946. 피로도  (0) 2025.04.21
42898. 등굣길  (0) 2025.04.09
42884. 단속 카메라  (0) 2025.04.04
178870. 연속된 부분 수열의 합  (0) 2025.04.01
43105. 정수 삼각형  (0) 2025.03.31
'Algorithm/Programmers' 카테고리의 다른 글
  • 87946. 피로도
  • 42898. 등굣길
  • 42884. 단속 카메라
  • 178870. 연속된 부분 수열의 합
사랑우주인
사랑우주인
  • 사랑우주인
    lovelyAlien
    사랑우주인
  • 전체
    오늘
    어제
  • 글쓰기
    관리
    • 분류 전체보기 (209)
      • Programming (4)
        • Spring (28)
        • Java (46)
        • JPA (2)
        • 디자인 패턴 (5)
        • 개발&아키텍처 (0)
      • Network (14)
      • OS (19)
      • Database (1)
      • Kubernetes (0)
      • Kafka (2)
      • Algorithm (49)
        • BaekJoon (1)
        • Programmers (19)
        • Algorithm (5)
        • Socar (2)
        • LeetCode (19)
      • Interview (2)
      • Issues (2)
      • DotJoin (1)
      • Git (4)
      • 독서 (3)
      • 끄적끄적 (1)
      • 외부활동 (26)
        • 항해플러스 (2)
        • JSCODE 네트워크 (19)
        • JSCODE 자바 (5)
      • SQL (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • GitHub
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    rotting oranges
    minimum number of arrows to burst balloons
    runner 기법
    Thread
    제네릭
    추상화 클래스
    RR
    Oauth2
    운영체제
    lower bounded wildcards
    pacific atlantic water flow
    OS
    BFS
    @JsonNaming
    socar
    wildcards
    Generic
    Climbing Stairs
    Reorder List
    Process
    algorithm
    트랜잭션
    @JsonProperty
    준영속 엔티티
    JSCode
    fcfs
    LinkedList
    디자인 패턴
    clone graph
    AuthenticationSuccessHandler
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.1
사랑우주인
12927. 야근 지수
상단으로

티스토리툴바