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
  • 링크

  • 공지사항

  • 인기 글

  • 태그

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

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

티스토리툴바