Skip to content

Commit b92e647

Browse files
authored
Merge pull request #232 from AlgorithmStudy-Allumbus/hongjoo
Hongjoo/ 7์›” 1์ฃผ์ฐจ /2
2 parents 446bded + 8346319 commit b92e647

File tree

2 files changed

+101
-0
lines changed

2 files changed

+101
-0
lines changed
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
"""
2+
# ์šฐ์„ ์ˆœ์œ„
3+
- wait_que = [[์ž‘์—… ๋ฒˆํ˜ธ , ์ž‘์—… ์š”์ฒญ ์‹œ๊ฐ„ , ์†Œ์š”์‹œ๊ฐ„]]
4+
- if wait_que :
5+
#์šฐ์„ ์ˆœ์œ„ ๋†’์€ ์ˆœ ๋ถ€ํ„ฐ ์ž‘์—… ํ• ๋‹น
6+
์šฐ์„ ์ˆœ์œ„ : [์†Œ์š”์‹œ๊ฐ„ short , ์š”์ฒญ์‹œ๊ฐ„์ด fast , ๋ฒˆํ˜ธ๊ฐ€ ์ž‘์€ ๊ฒƒ]
7+
- intercept ์—†์Œ
8+
- ๊ฐ™์€ time ์— HD์— ์ž‘์—…์ด ๋๋‚˜๋Š” ์‹œ์  == ๋‹ค๋ฅธ ์ž‘์—… ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋Š” ์‹œ์ ์ผ ๊ฒฝ์šฐ,
9+
HD ์ž‘์—… ์ข…๋ฃŒ -> ๋ฐ”๋กœ wait queue์—์„œ ready queue๋กœ ํ• ๋‹น
10+
- ์ถœ๋ ฅ : ๊ฐ jobs๋“ค์˜ ๋ฐ˜ํ™˜ ์‹œ๊ฐ์˜ ํ‰๊ท ๊ฐ’์˜ ์ •์ˆ˜๋ถ€๋ถ„
11+
# INSPECT
12+
1. ๋‹ค์ค‘ ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ์šฐ์„ ์ˆœ์œ„ ํ ์‚ฌ์šฉํ•˜๊ธฐ
13+
2. time += 1 ๊ฐ time ๋ณ„๋กœ (1) wait ํ์— <- jobs ํ• ๋‹นํ•˜๊ธฐ (2) HD ์— <- wait ํ์† ์ž‘์—… ํ• ๋‹นํ•˜๊ธฐ ๋“ฑ ์ „์ฒด ์ž‘์—… ์ง„ํ–‰
14+
"""
15+
import heapq
16+
def solution(jobs):
17+
answer = 0 ; a = []
18+
wait = []
19+
# ๋ฐ˜๋ณต๋ฌธ ์ข…๋ฃŒ ์กฐ๊ฑด : ๋ชจ๋“  jobs๊ฐ€ HD ์ž‘์—… ์ข…๋ฃŒ
20+
finished = 0 ; t = 0 ; hd_timeout = -1
21+
# time += 1 ๋กœ wait ํ์™€ HD ํ• ๋‹น์„ ๊ฐ ์‹œ๊ฐ๋ณ„๋กœ ํ™•์ธ ๋ฐ ์ฒ˜๋ฆฌ
22+
while finished < len(jobs) :
23+
# print(f"##t {t}")
24+
#[1] wait ํ์— ์š”์ฒญ ์‹œ๊ฐ์— ๋งž์ถฐ ์ž‘์—… ํ• ๋‹นํ•˜๊ธฐ
25+
for idx , (accept_time , duration) in enumerate(jobs):
26+
if accept_time == t :
27+
heapq.heappush(wait , [duration , accept_time, idx])
28+
29+
#2. HD ์ž‘์—… ์ง„ํ–‰ ์—ฌ๋ถ€ ํ™•์ธ
30+
#[1]. HD ์ž‘์—… ์ง„ํ–‰์ค‘
31+
if hd_timeout > 0 : # HD ์ž‘์—… ์ง„ํ–‰์ค‘
32+
hd_timeout -=1
33+
#[2] HD ์ž‘์—… ์™„๋ฃŒ ๋ฐ ๋น„์–ด ์žˆ์„ ๋•Œ(hd_timout ์Œ์ˆ˜ , ์ดˆ๊ธฐ ์‹œ์ )
34+
elif hd_timeout <= 0 :
35+
if hd_timeout == 0 : # (1) ์ง„ํ–‰์ค‘์ธ HD ์ž‘์—… ์™„๋ฃŒ -> ์™„๋ฃŒ ์ž‘์—… ๊ฐœ์ˆ˜ += 1
36+
a.append([t, start_t]) # ์ž‘์—…์˜ (์ข…๋ฃŒ ์‹œ์ , ์š”์ฒญ ์‹œ์ ) ์„ ์ •๋‹ต ๋ฆฌ์ŠคํŠธ์— ๋ฐ˜ํ™˜
37+
finished += 1
38+
hd_timeout = -1 # hd ๋น„์–ด์žˆ์Œ
39+
40+
# wait ํ์˜ ์กด์žฌํ•˜๋ฉด -> waitํ์—์„œ ์šฐ์„ ์ˆœ์œ„ ์ž‘์—…์„ ๋ฝ‘์•„ HD์— ํ• ๋‹นํ•˜๊ธฐ
41+
if wait :
42+
hd_timeout , start_t , id = heapq.heappop(wait)
43+
hd_timeout = hd_timeout - 1
44+
45+
t += 1
46+
47+
# [4] ์ž‘์—… ๋ฐ˜ํ™˜ ์‹œ๊ฐ„(turnaround_time) : ์š”์ฒญ์‹œ๊ฐ„ - ์™„๋ฃŒ ์‹œ๊ฐ„
48+
for e, s in a :
49+
answer += (e - s)
50+
answer = answer // len(a)
51+
52+
return answer
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
"""
2+
- ์šฐ์„ ์ˆœ์œ„ ํ ํ•จ์ˆ˜ ์กฐ๊ฑด
3+
- l ์ˆซ์ž : ํ์— ํ•ด๋‹น ์ˆซ์ž ์‚ฝ์ž…
4+
- D -1 : ํ์—์„œ ์ตœ์†Œ๊ฐ’ ์‚ญ์ œ(๋นˆ ํ๋ฉด ๋ฌด์‹œ )
5+
- D 1 : ํ์—์„œ ์ตœ๋Œ€๊ฐ’ ์‚ญ์ œ
6+
- ์ถœ๋ ฅ : ์—ฐ์‚ฐ ์ข…๋ฃŒ ํ›„ ํ๊ฐ€ ๋น„์–ด ์žˆ์Œ [0,0] / ๋น„์–ด ์žˆ์ง€ ์•Š์Œ [์ตœ๋Œ€๊ฐ’, ์ตœ์†Ÿ๊ฐ’]
7+
-
8+
"""
9+
import heapq
10+
def solution(operations):
11+
answer = []
12+
heap = []
13+
14+
def prior_queue(operate , heap) : # ์ž…๋ ฅ ๋ช…๋ น๋ฌธ ์ข…๋ฅ˜์— ๋”ฐ๋ผ 3๊ฐ€์ง€ ๋™์ž‘ ์ค‘ ํƒ 1์„ ์ ์šฉํ•œ๋‹ค.
15+
16+
action , num = operate.split()
17+
# [0] (์˜ˆ์™ธ์ฒ˜๋ฆฌ)๋นˆ heap์— ์‚ญ์ œ ๋ช…๋ น์ด๋ฉด, ๋ฌด์‹œํ•œ๋‹ค.
18+
if not heap and action == "D":
19+
return heap
20+
# [1] ํ์— ์‚ฝ์ž…ํ•˜๊ธฐ
21+
if action == "I" :
22+
heapq.heappush(heap , int(num))
23+
# [2] ์ตœ์†Œ๊ฐ’ ์‚ญ์ œ
24+
elif action == "D" and num == "-1":
25+
heapq.heapify(heap)
26+
heapq.heappop(heap)
27+
#[3] ์ตœ๋Œ€๊ฐ’ ์‚ญ์ œ
28+
elif action == 'D' and num == "1" :
29+
heap = list(map(lambda x : -1*x , heap))
30+
heapq.heapify(heap)
31+
heapq.heappop(heap)
32+
heap = list(map(lambda x : -1*x , heap))
33+
34+
return heap
35+
36+
#2. ์ž…๋ ฅ ๋ช…๋ น๋ฌธ์— ๋Œ€ํ•ด ๋ฐ˜๋ณต ๋™์ž‘ํ•˜๊ธฐ
37+
for o in operations :
38+
heap=prior_queue(o , heap )
39+
40+
#3. ์ถœ๋ ฅ ํ˜•ํƒœ ๋งž์ถฐ ๋ณ€ํ˜•ํ•˜๊ธฐ
41+
if len(heap) >=2 : # (1)์•ˆ ๋น„์–ด ์žˆ์œผ๋ฉด -> ์ตœ๋Œ€๊ฐ’ & ์ตœ์†Œ๊ฐ’ ์ถœ๋ ฅ
42+
heap.sort()
43+
return [heap[-1] , heap[0]]
44+
elif len(heap) < 1 : # (2) ๋น„์–ด ์žˆ์Œ -> [0,0]
45+
return [0,0]
46+
else : # (3) heap ์ด 1๊ฐœ ๋‚จ์•„ ์žˆ์„๋–„ -> ์ตœ๋Œ€๊ฐ’ = ์ตœ์†Œ๊ฐ’ *[ํ…Œ์ผ€ 8,9,10]
47+
return [heap[0] , heap[0]]
48+
49+
return answer

0 commit comments

Comments
ย (0)