2022. 6. 7. 03:10ㆍ알고리즘/프로그래머스
코딩테스트 - 힙(Heap) - 디스크 컨트롤러 [Level3]
문제링크 : 디스크 컨트롤러
코딩테스트 연습 - 디스크 컨트롤러
하드디스크는 한 번에 하나의 작업만 수행할 수 있습니다. 디스크 컨트롤러를 구현하는 방법은 여러 가지가 있습니다. 가장 일반적인 방법은 요청이 들어온 순서대로 처리하는 것입니다. 예를
programmers.co.kr
문제풀이
Heap 문제입니다.
그런데 저는 힙 없이 사용했습니다.

일단 가장 먼저 핵심적인 것은
"할 수 있는 작업에서 시간이 짧은 거부터 시작한다"라는 점입니다.
긴 작업 소요시간이 걸리면 그만큼 시간이 남은 작업만큼 배로 더해지기 때문입니다.
처음에 jobs를 "작업이 요청되는 시점, 작업의 소요시간" 순으로 정렬합니다. (정렬이 안되어 있음!!)
jobs의 처음 값을 시작으로
start, end [현재 시간] 그리고 걸린 작업 시간의 합인 count를 지정해줍니다.
이제 순회를 돌 때마다
jobs에서 처리 가능한 job을 판단해서
( 작업이 요청되는 시점 < end )
tmp_jobs[가능한 작업들이 순서에 맞게 저장되는 곳]에 넣습니다.
(jobs에서 요소를 pop을 하면서 비워질 때까지 합니다.)
tmp_jobs에서는 작업 소요시간이 적은 거부터 순서에 맞게 처리를 해야 하므로
매번 순회를 돌 때마다 정렬을 해줍니다.
근데 이제 jobs에서 처리 가능한 job이 없다면??
(tmp_jobs 가 비어있다면??)
처리가능한 작업을 만날 때까지 end를 +1 합니다.
작업을 처리 할때 마다
end에 작업소요시간을 더해주며
end에서 작업이 요청되는 시점을 뺀 값을 count에 더해주면 됩니다.
결국 tmp_jobs와 jobs가 다 비워지면 count를 디스크 개수로 나누어 출력합니다.
가장 인기 많은 답변
- 힙큐를 사용한 정석 방식이라고 볼 수 있습니다.
- 확실히 더 간편해 보입니다. 근데 저는 힙큐 쓰는것에 익숙치 않아서;; ㅠ
- max( current_time+ dur, arr + dur ) 을 통해서 작업이 없는 시간을 건너뜁니다.
- 저는 end를 +1하면서 지나갔는데 시간이 많이 단축될 거 같습니다.
- 실제로 위 코드가 시간이 조금 더 적게 걸렸습니다.
- 지금보니 제 코드에서 초기값 설정은 전혀 할 필요가 없어보이네요 ㅎㅎ
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 네트워크 - 파이썬 python (0) | 2022.06.08 |
---|---|
[프로그래머스] 정수 삼각형 - 파이썬 python (0) | 2022.06.07 |
[프로그래머스] 입국심사 - 파이썬 python (0) | 2022.06.06 |
[프로그래머스] 모의고사 - 자바스크립트 JS (0) | 2022.06.03 |
[프로그래머스] K번째수 - 자바스크립트 JS (0) | 2022.06.03 |