[LeetCode] The Employee That Worked on the Longest Task

아르당·2026년 9월 9일

LeetCode

목록 보기
516/583
post-thumbnail

문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음

Problem

n명의 직원이 있고, 각 0부터 n - 1까지 고유한 id를 갖는다.
2차원 정수 배열 logs가 주어지고, logs[i] = [idi, leaveTimei]이다.

  • idi는 직원의 id이고, i번째 일을 한다.
  • leaveTimei는 직원이 i번째 일을 끝내는데 걸리는 시간이다. 모든 leaveTimei 값은 고유하다.

i번째 작업은 (i - 1)번째 작업이 끝난 후에 시작하고, 0번째 작업은 0시에 시작된다.
가장 오랜 시간이 소요된 작업을 수행한 직원의 id를 반환해라. 만약 두명 이상의 직원이 동일한 최장 시간을 했다면 id가 가장 작은 id를 반환해라.

Example

#1
Input: n = 10, logs = [[0, 3], [2, 5], [0, 9], [1, 15]]
Output: 1
Explanation:
작업 0은 0에 시작하고 3에 끝나서 3시간이 걸린다.
작업 1은 3에 시작하고 2에 끝나서 2시간이 걸린다.
작업 2는 5에 시작하고 9에 끝나서 4시간이 걸린다.
작업 3은 9에 시작하고 15에 끝나서 6시간이 걸린다.
가장 오래 걸린 작업은 작업 3이고 아이디가 1인 직원이 작업해서 1을 반환한다.

#2
Input: n = 26, logs = [[1, 1], [3, 7], [2, 12], [7, 17]]
Output: 3
Explanation:
작업 0은 0에 시작하고 1에 끝나서 1시간이 걸린다.
작업 1은 1에 시작하고 7에 끝나서 6시간이 걸린다.
작업 2는 7에 시작하고 12에 끝나서 5시간이 걸린다.
작업 3은 12에 시작하고 17에 끝나서 5시간이 걸린다.
가장 오래 걸린 작업은 작업 1이다. 작업한 직원은 직원 3이라서, 3을 반환한다.

#3
Input: n = 2, logs = [[0, 10], [1, 20]]
Output: 0
Explanation:
작업 0은 0에 시작하고 10에 끝나서 10시간 걸린다.
작업 1은 10에 시작하고 20에 끝나서 20시간 걸린다.
가장 오래 걸린 작업은 작업 0과 1이다. 작업한 직원은 직원 0과 1이라서, 가장 작은 id 0을 반환한다.

Constraints

  • 2 <= n <= 500
  • 1 <= logs.length <= 500
  • logs[i]. length == 2
  • 0 <= idi <= n - 1
  • 1 <= leaveTimei <= 500
  • idi != idi + 1
  • leaveTimei는 엄격히 증가하는 순서로 정렬된다.

Solved

class Solution {
    public int hardestWorker(int n, int[][] logs) {
        int id = logs[0][0];
        int max = logs[0][1];

        for(int i = 1; i < logs.length; i++){
            int time = logs[i][1] - logs[i - 1][1];

            if(time > max){
                id = logs[i][0];
                max = time;
            }

            if(time == max){
                id = Math.min(id, logs[i][0]);
            }
        }

        return id;
    }
}
profile
내 마음대로 코드 작성하는 세상

0개의 댓글