728x90
SMALL

using System.Collections.Generic;
using System.Linq;

public class Solution {

    public class Job {
        public int requestedAt = -1;
        public int duration = -1;

        public int waited = -1;
    }

    public int solution(int[,] input) {
        var JOB_CNT = input.GetLength(0);
        var jobs = new List<Job>(JOB_CNT);

        for (int i = 0; i < JOB_CNT; i++) {
            jobs.Add(new Job() {
                requestedAt = input[i, 0],
                duration = input[i, 1],
            });
        }

        int time = 0, done = 0;
        while (done < JOB_CNT) {
            var job = jobs                          // 전체 작업 중에서
                .Where(j => j.waited < 0)           // 아직 waited 계산이 끝나지 않았고,
                .Where(j => j.requestedAt <= time)  // 현재 시간(time) 기준 요청이 들어와있으며
                .OrderBy(j => j.duration)           // 그 중에서 작업에 필요한 시간이
                .FirstOrDefault();                  // 가장 짧은 작업을 선정

            if (null == job) {
                time++; continue;   // 없으면 시간 경과만 하고 넘어감
            }

            time += job.duration;
            job.waited = time - job.requestedAt;
            done++;
        }

        return (int)jobs.Average(j => j.waited);
    }
}
728x90

설정

트랙백

댓글