Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit d2a968d

Browse filesBrowse files
authored
Merge pull request #204 from Jo-Myounghee/myoung/feature/programmers-42627
myoung programmers 42627 디스크 컨트롤러
2 parents 16caaa8 + eabfe86 commit d2a968d
Copy full SHA for d2a968d

File tree

Expand file treeCollapse file tree

2 files changed

+82
-0
lines changed
Open diff view settings
Filter options
Expand file treeCollapse file tree

2 files changed

+82
-0
lines changed
Open diff view settings
Collapse file

‎myoung/programmers/42627/README.md‎

Copy file name to clipboard
+54Lines changed: 54 additions & 0 deletions
  • Display the source diff
  • Display the rich diff
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
# 프로그래머스 42627 디스크 컨트롤러
2+
3+
[문제 링크](https://programmers.co.kr/learn/courses/30/lessons/42627)
4+
5+
## 1. 설계 로직
6+
7+
1. 주어진 job을 정렬합니다.
8+
2. waiting list에 현재 대기 중인 job들을 담습니다.
9+
3. 현재 진행하고 있는 job이 끝나면 waiting list를 갱신합니다.
10+
(주어진 job 중 현재 대기 중인 job이나 waiting list에 존재하지 않는 job 추가)
11+
4. waiting list를 소요시간 기준으로 정렬 후 가장 짧은 소요 시간을 가진 job을 실행합니다.
12+
5. waiting list에 존재하는 job이 없는 경우 현재 대기 중인 job이 없으므로 아직 요청되지 않은 job 중 가장 먼저 요청되는 job을 작업합니다.
13+
6. 모든 작업이 끝나면 작업에 소요된 시간과 작업 개수를 나누어 평균을 구합니다.
14+
15+
- 시간복잡도: O(N^2logN)
16+
- 하나의 작업을 수행할 때마다 waiting list를 정렬해주는 로직이 들어있어 최대 N^2logN이라고 생각했습니다.
17+
18+
## 2. 코드
19+
20+
```python
21+
import heapq
22+
23+
def solution(jobs):
24+
N = len(jobs)
25+
_time = 0
26+
answer = 0
27+
jobs.sort()
28+
waiting_lst = []
29+
while jobs or waiting_lst:
30+
while jobs:
31+
now = jobs[0]
32+
if _time >= now[0]:
33+
waiting_lst.append(heapq.heappop(jobs))
34+
else:
35+
break
36+
if waiting_lst:
37+
waiting_lst.sort(key=lambda x: x[1])
38+
now = heapq.heappop(waiting_lst)
39+
answer += (_time-now[0]+now[1])
40+
_time += now[1]
41+
else:
42+
if jobs:
43+
now = heapq.heappop(jobs)
44+
answer += now[1]
45+
_time = (now[0]+now[1])
46+
return answer//N
47+
```
48+
49+
50+
51+
## 3. 후기
52+
53+
- 처음에는 요청되는 시간 순으로 하면 되겠다 싶었는데 문제를 읽으니 그것이 아니었다!
54+
Collapse file
+28Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import heapq
2+
3+
def solution(jobs):
4+
N = len(jobs)
5+
_time = 0
6+
answer = 0
7+
jobs.sort()
8+
waiting_lst = []
9+
while jobs or waiting_lst:
10+
while jobs:
11+
now = jobs[0]
12+
if _time >= now[0]:
13+
waiting_lst.append(heapq.heappop(jobs))
14+
else:
15+
break
16+
if waiting_lst:
17+
waiting_lst.sort(key=lambda x: x[1])
18+
now = heapq.heappop(waiting_lst)
19+
answer += (_time-now[0]+now[1])
20+
_time += now[1]
21+
else:
22+
if jobs:
23+
now = heapq.heappop(jobs)
24+
answer += now[1]
25+
_time = (now[0]+now[1])
26+
return answer//N
27+
28+
print(solution([[0, 3], [1, 9], [2, 6], [30, 3]]))

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.