글
C# 디스크 컨트롤러(다른 사람의 풀이)
프로그래밍
2023. 1. 27. 16:44
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
'프로그래밍' 카테고리의 다른 글
프로그래머스 C# 나머지 한 점 좌표 출력(직사각형, XOR) (0) | 2023.01.28 |
---|---|
C# 가장 큰 수(foreach, CompareTo, var, string.Join) (0) | 2023.01.27 |
C# 단어 변환(DFS, 깊이 우선 탐색) (0) | 2023.01.27 |
프로그래머스 레벨1 C# 체육복(list Remove) (0) | 2023.01.27 |
프로그래머스 C# K번째 수(list.Clear(), list.Count) (0) | 2023.01.27 |