참고 : 초기화/로직/결과출력 부분으로 나눠서 검증. 출력 부분 검증 안해서 오래걸림
링크 : https://school.programmers.co.kr/learn/courses/30/lessons/42627#
import java.util.*;
import java.util.stream.Collectors;
class Solution {
public int solution(int[][] jobs) {
int answer = 0;
//매개변수로 들어온 작업 초기화
List<Job> jobList = new ArrayList<>();
for(int i=0; i< jobs.length; i++){
jobList.add(new Job(jobs[i][0], jobs[i][1]));
}
//요청 시간별 정렬
jobList.sort(Comparator.comparingInt(v->v.submit));
List<Job> readyList = new ArrayList<>();
List<Job> finishList = new ArrayList<>();
//경과 시간
int time = 0;
//최종 리스트가 작업 리스트 사이즈와 다르면 참
while (!(finishList.size() == jobs.length)) {
int finalTime = time;
//지금 시간과 같거나 먼저 들어온 작업 추출
jobList.stream()
.filter(v->v.submit <= finalTime)
.forEachOrdered(v->readyList.add(v));
//작업 종료시간이 제일 빠른 작업 탐색
Optional<Job> first = readyList.stream()
.sorted(Comparator.comparingInt(v->finalTime+ v.workTime))
.findFirst();
//추출 배열 초기화
readyList.clear();
if(first.isPresent()){
//값이 있을경우 시작 시간과 종료시간 세팅
Job job = first.get();
job.startTime = time;
job.endTime = time + job.workTime;
//최종 배열에 추가
finishList.add(new Job(job));
//초기화 했던 배열에서 삭제 line36
jobList.remove(job);
//시간 진행
time = time+job.workTime;
}else{
time++;
}
}
//총 걸린시간 = 종료시간 - 요청시간
int sum = finishList.stream()
.mapToInt(v -> v.endTime - v.submit)
.sum();
//평균(내림)
answer = sum / finishList.size();
return answer;
}
public class Job implements Comparable<Job>{
int submit;
int workTime;
int startTime;
int endTime;
public Job(int submit, int workTime) {
this.submit = submit;
this.workTime = workTime;
this.startTime = 0;
this.endTime = 0;
}
public Job( Job o){
this.submit = o.submit;
this.workTime = o.workTime;
this.startTime = o.startTime;
this.endTime = o.endTime;
}
@Override
public String toString() {
return "\n" + "Job{" +
"submit=" + submit +
", workTime=" + workTime +
", startTime=" + startTime +
", endTime=" + endTime +
'}';
}
@Override
public int compareTo(Job o) {
int thisEnd = this.submit + this.workTime;
int oEnd = o.submit + o.workTime;
return thisEnd - oEnd;
}
}
}
'교육 > 코테' 카테고리의 다른 글
[프로그래머스]JAVA 가장 큰 수 -정렬 (0) | 2022.07.07 |
---|---|
[프로그래머스]JAVA 이중우선순위큐 -힙 (0) | 2022.07.07 |
[프로그래머스]JAVA 주식가격 -스택/큐 (1) | 2022.07.06 |
[프로그래머스]JAVA 다리를 지나는 트럭 -스택/큐 (0) | 2022.07.06 |
[프로그래머스]JAVA 프린터 -스택/큐 (0) | 2022.07.06 |