From 50de6cdc31d8167947038103bcb3d8b127d1b8a6 Mon Sep 17 00:00:00 2001 From: Hongjoo Date: Sun, 6 Jul 2025 18:43:32 +0900 Subject: [PATCH 1/3] =?UTF-8?q?[PGS]#42627.=20=EB=94=94=EC=8A=A4=ED=81=AC?= =?UTF-8?q?=EC=BB=A8=ED=8A=B8=EB=A1=A4=EB=9F=AC/lv3/3hours?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ttps://school.programmers.co.kr/learn/courses/30/lessons/42627 --- ...50\355\212\270\353\241\244\353\237\254.py" | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 "Hongjoo/lv3/\353\224\224\354\212\244\355\201\254\354\273\250\355\212\270\353\241\244\353\237\254.py" diff --git "a/Hongjoo/lv3/\353\224\224\354\212\244\355\201\254\354\273\250\355\212\270\353\241\244\353\237\254.py" "b/Hongjoo/lv3/\353\224\224\354\212\244\355\201\254\354\273\250\355\212\270\353\241\244\353\237\254.py" new file mode 100644 index 00000000..c328ae3e --- /dev/null +++ "b/Hongjoo/lv3/\353\224\224\354\212\244\355\201\254\354\273\250\355\212\270\353\241\244\353\237\254.py" @@ -0,0 +1,53 @@ +""" +# 우선순위 +- wait_que = [[작업 번호 , 작업 요청 시간 , 소요시간]] +- if wait_que : + #우선순위 높은 순 부터 작업 할당 + 우선순위 : [소요시간 short , 요청시간이 fast , 번호가 작은 것] + +- intercept 없음 +- 같은 time 에 HD에 작업이 끝나는 시점 == 다른 작업 요청이 들어오는 시점일 경우, + HD 작업 종료 -> 바로 wait queue에서 ready queue로 할당 +- 출력 : 각 jobs들의 반환 시각의 평균값의 정수부분 +# INSPECT +1. 다중 변수에 대한 우선순위 큐 사용하기 +2. time += 1 각 time 별로 (1) wait 큐에 <- jobs 할당하기 (2) HD 에 <- wait 큐속 작업 할당하기 등 전체 작업 진행 +""" +import heapq +def solution(jobs): + answer = 0 ; a = [] + wait = [] + # 반복문 종료 조건 : 모든 jobs가 HD 작업 종료 + finished = 0 ; t = 0 ; hd_timeout = -1 + # time += 1 로 wait 큐와 HD 할당을 각 시각별로 확인 및 처리 + while finished < len(jobs) : + # print(f"##t {t}") + #[1] wait 큐에 요청 시각에 맞춰 작업 할당하기 + for idx , (accept_time , duration) in enumerate(jobs): + if accept_time == t : + heapq.heappush(wait , [duration , accept_time, idx]) + + #2. HD 작업 진행 여부 확인 + #[1]. HD 작업 진행중 + if hd_timeout > 0 : # HD 작업 진행중 + hd_timeout -=1 + #[2] HD 작업 완료 및 비어 있을 때(hd_timout 음수 , 초기 시점) + elif hd_timeout <= 0 : + if hd_timeout == 0 : # (1) 진행중인 HD 작업 완료 -> 완료 작업 개수 += 1 + a.append([t, start_t]) # 작업의 (종료 시점, 요청 시점) 을 정답 리스트에 반환 + finished += 1 + hd_timeout = -1 # hd 비어있음 + + # wait 큐의 존재하면 -> wait큐에서 우선순위 작업을 뽑아 HD에 할당하기 + if wait : + hd_timeout , start_t , id = heapq.heappop(wait) + hd_timeout = hd_timeout - 1 + + t += 1 + + # [4] 작업 반환 시간(turnaround_time) : 요청시간 - 완료 시간 + for e, s in a : + answer += (e - s) + answer = answer // len(a) + + return answer \ No newline at end of file From 5938cf5a0e29935fadceed3a2d0bdf90b0ba410d Mon Sep 17 00:00:00 2001 From: Hongjoo Date: Sun, 6 Jul 2025 18:44:15 +0900 Subject: [PATCH 2/3] =?UTF-8?q?[PGS]#42628.=20=EC=9A=B0=EC=84=A0=EC=88=9C?= =?UTF-8?q?=EC=9C=84=ED=81=90/lv3/40min?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://school.programmers.co.kr/learn/courses/30/lessons/42628 --- ...40\354\210\234\354\234\204\355\201\220.py" | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 "Hongjoo/lv3/\354\235\264\354\244\221\354\232\260\354\204\240\354\210\234\354\234\204\355\201\220.py" diff --git "a/Hongjoo/lv3/\354\235\264\354\244\221\354\232\260\354\204\240\354\210\234\354\234\204\355\201\220.py" "b/Hongjoo/lv3/\354\235\264\354\244\221\354\232\260\354\204\240\354\210\234\354\234\204\355\201\220.py" new file mode 100644 index 00000000..96205c23 --- /dev/null +++ "b/Hongjoo/lv3/\354\235\264\354\244\221\354\232\260\354\204\240\354\210\234\354\234\204\355\201\220.py" @@ -0,0 +1,49 @@ +""" +- 우선순위 큐 함수 조건 + - l 숫자 : 큐에 해당 숫자 삽입 + - D -1 : 큐에서 최소값 삭제(빈 큐면 무시 ) + - D 1 : 큐에서 최대값 삭제 +- 출력 : 연산 종료 후 큐가 비어 있음 [0,0] / 비어 있지 않음 [최대값, 최솟값] +- +""" +import heapq +def solution(operations): + answer = [] + heap = [] + + def prior_queue(operate , heap) : # 입력 명령문 종류에 따라 3가지 동작 중 택 1을 적용한다. + + action , num = operate.split() + # [0] (예외처리)빈 heap에 삭제 명령이면, 무시한다. + if not heap and action == "D": + return heap + # [1] 큐에 삽입하기 + if action == "I" : + heapq.heappush(heap , int(num)) + # [2] 최소값 삭제 + elif action == "D" and num == "-1": + heapq.heapify(heap) + heapq.heappop(heap) + #[3] 최대값 삭제 + elif action == 'D' and num == "1" : + heap = list(map(lambda x : -1*x , heap)) + heapq.heapify(heap) + heapq.heappop(heap) + heap = list(map(lambda x : -1*x , heap)) + + return heap + + #2. 입력 명령문에 대해 반복 동작하기 + for o in operations : + heap=prior_queue(o , heap ) + + #3. 출력 형태 맞춰 변형하기 + if len(heap) >=2 : # (1)안 비어 있으면 -> 최대값 & 최소값 출력 + heap.sort() + return [heap[-1] , heap[0]] + elif len(heap) < 1 : # (2) 비어 있음 -> [0,0] + return [0,0] + else : # (3) heap 이 1개 남아 있을떄 -> 최대값 = 최소값 *[테케 8,9,10] + return [heap[0] , heap[0]] + + return answer \ No newline at end of file From 83463192f14596db2cf4fc011cf943292e486f6d Mon Sep 17 00:00:00 2001 From: Hongjoo Date: Sun, 6 Jul 2025 18:44:35 +0900 Subject: [PATCH 3/3] =?UTF-8?q?[PGS]#42627.=20=EB=94=94=EC=8A=A4=ED=81=AC?= =?UTF-8?q?=EC=BB=A8=ED=8A=B8=EB=A1=A4=EB=9F=AC/lv3/3hours?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ttps://school.programmers.co.kr/learn/courses/30/lessons/42627 --- ...5\201\254\354\273\250\355\212\270\353\241\244\353\237\254.py" | 1 - 1 file changed, 1 deletion(-) diff --git "a/Hongjoo/lv3/\353\224\224\354\212\244\355\201\254\354\273\250\355\212\270\353\241\244\353\237\254.py" "b/Hongjoo/lv3/\353\224\224\354\212\244\355\201\254\354\273\250\355\212\270\353\241\244\353\237\254.py" index c328ae3e..d74ea016 100644 --- "a/Hongjoo/lv3/\353\224\224\354\212\244\355\201\254\354\273\250\355\212\270\353\241\244\353\237\254.py" +++ "b/Hongjoo/lv3/\353\224\224\354\212\244\355\201\254\354\273\250\355\212\270\353\241\244\353\237\254.py" @@ -4,7 +4,6 @@ - if wait_que : #우선순위 높은 순 부터 작업 할당 우선순위 : [소요시간 short , 요청시간이 fast , 번호가 작은 것] - - intercept 없음 - 같은 time 에 HD에 작업이 끝나는 시점 == 다른 작업 요청이 들어오는 시점일 경우, HD 작업 종료 -> 바로 wait queue에서 ready queue로 할당