728x90


출처: https://school.programmers.co.kr/learn/courses/30/lessons/42627
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제를 해결하기 위하여 필요한 것들 사고해보기
- 어떻게 하면 요청부터 종료까지 걸리는 시간의 평균이 가장 적을까??
- 요청 시간을 기준으로 정렬한다.
- 작업이 수행되는데 소요되는 시간이 적게 걸리는 시간순으로 수행한다면 ->요청부터 작업완료까지의 소요시간이 가장 적을 것이다.
그럼 위에서 한 사고를 바탕으로 예외를 생각하며 구현해보자
import java.util.Arrays;
import java.util.PriorityQueue;
public class 디스크_컨트롤러 {
public int solution(int[][] jobs) {
//최종적인 목표는 요청부터 종료까지 걸린시간의 평균이 가장 작게
int answer = 0;
//일단 도착시간을 기준으로 오름차순 정렬하기
Arrays.sort(jobs, (jobA, jobB)->jobA[0]-jobB[0]);
//작업시간이 짧은 순으로, 정렬하기
PriorityQueue<int []> pq = new PriorityQueue<>((o1, o2)->o1[1]-o2[1]);
int jobCnt = 0;
int jobIdx = 0;
int end = 0; //이전 작업의 종료시간
while(jobCnt<jobs.length){
while(jobIdx<jobs.length && jobs[jobIdx][0]<=end){
pq.offer(jobs[jobIdx++]);
}
if(pq.isEmpty()){// end를 다음 task의 요청시간으로
end = jobs[jobIdx][0];
}else{
int [] task = pq.poll();
int requestTime = task[0];
int taskTime = task[1];
answer+=taskTime+end-requstTime;
end+=taskTime;
jobCnt++;
}
}
return answer/jobs.length;
}
}
첫째, 일단 문제 해결을 위한 궁극적인 사고가 우선 돼야한다.
둘째, 사고한 것을 바탕으로 예외상황들을 고려하며 코드를 작성해야 한다.
솔직히 사고가 되는 것이 가장 중요하지만, 구현하는 것도 충분히 연습하지 않는다면 힘들다. 꾸준하게 연습하자.
'알고리즘' 카테고리의 다른 글
| [프로그래머스] 공원산책 (java) (1) | 2024.01.09 |
|---|---|
| [백준] 5525 IOIOI (java)문제풀이 (1) | 2024.01.08 |
| [프로그래머스] PCCE 기출 9번(java) (1) | 2024.01.03 |
| 백준 1753번 최단경로 (0) | 2023.12.29 |
| 백준 4659 비빌번호 발음하기 (0) | 2023.12.27 |