알고리즘 입문 수업을 듣고 중요한 내용을 정리했습니다.
개인 공부 후 자료를 남기기 위한 목적이므로 내용 상에 오류가 있을 수 있습니다.
문제
[응급실(큐)]
메디컬 병원 응급실에는 의사가 한 명뿐이다.
응급실은 환자가 도착한 순서대로 진료를하며, 위험도가 높은 환자는 빨리 응급조치를 해야한다. 이러한 문제를 해결하기 위해 응급실은 다음과 같은 방법으로 환자의 진료순서를 정한다.
- 응급실에 접수한 순서대로 환자의 진료를 본다.
- 단, 해당 순서의 환자보다 위험도가 높은 환자가 존재하면 그 환자는 대기목록의 맨 마지막으로 보내진다.
- 만약, 해당 순서의 환자보다 위험도가 높은 환자가 없으면 그 환자를 진료한다.
현재 N명의 환자가 응급실의 대기목록에 있으며, 대기목록에는 환자의 위험도가 함께 표시되어 있다.
대기 목록상의 M번째 환자가 몇 번째로 진료를 받는지 출력하는 프로그램을 작성하시오.
(단, 대기 목록상의 M번째는 대기목록의 첫 번째 환자를 0번째로 간주하여 표기한 것임)
*입력 설명
첫 번째 줄에 자연수 N(5 ≤ N ≤ 100)과 M(0 ≤ M < N)이 주어진다.
두 번째 줄에 접수한 순서대로 환자의 위험도(50 ≤ 위험도 ≤ 100)가 주어진다.
위험도는 값이 높을수록 더 위험하다는 뜻이며, 위험도가 같은 환자가 존재할 수 있다.
*출력 설명
M번째 환자가 몇 번째로 진료 받는지를 출력한다.
풀이(Python)
답안
import sys
from collections import deque
sys.stdin = open('AA/input_37.txt', 'rt')
n, m = map(int, input().split())
Q =[(pos, val) for pos, val in enumerate(list(map(int, input().split())))]
Q = deque(Q)
cnt = 0
while True:
cur = Q.popleft()
if any(cur[1] < x[1] for x in Q):
Q.append(cur)
else:
cnt += 1
if cur[0] == m:
break
print(cnt)
# 출력 : 3
input_37.txt(입력)
5 2
60 50 70 80 90
중요내용
- Q =[(pos, val) for pos, val in enumerate(list(map(int, input().split())))]는 입력받은 데이터를 숫자형 데이터로 변환하여 인덱스 번호와 함께 튜플 구조로 리스트에 넣어주는 코드이다. (이러한 코드를 리스트 표현식이라고 함)
- any() 함수는 인자로 받은 조건 중 한개라도 만족하면 True 값을 반환한다.
- 변수 cnt는 진료를 받은 횟수를 의미한다.
'알고리즘' 카테고리의 다른 글
Algorithm - 단어 찾기(딕셔너리 해쉬) (0) | 2021.12.06 |
---|---|
Algorithm - 교육과정 설계(큐) (0) | 2021.12.06 |
Algorithm - 공주 구하기(큐) (0) | 2021.12.05 |
Algorithm - 후위 표기식 연산(스택) (0) | 2021.12.03 |
Algorithm - 후위 표기식 만들기(스택) (0) | 2021.12.03 |
댓글