새소식

Computer Science/코딩테스트 문제 풀이

[예제] [파이썬] [큐] 응급실

  • -

메디컬 병원 응급실에는 의사가 한 명밖에 없습니다.
응급실은 환자가 도착한 순서대로 진료를 합니다. 하지만 위험도가 높은 환자는 빨리 응급조
치를 의사가 해야 합니다. 이런 문제를 보완하기 위해 응급실은 다음과 같은 방법으로 환자의
진료순서를 정합니다.


• 환자가 접수한 순서대로의 목록에서 제일 앞에 있는 환자목록을 꺼냅니다.
• 나머지 대기 목록에서 꺼낸 환자 보다 위험도가 높은 환자가 존재하면 대기목록 제일 뒤로


다시 넣습니다. 그렇지 않으면 진료를 받습니다.
즉 대기목록에 자기 보다 위험도가 높은 환자가 없을 때 자신이 진료를 받는 구조입니다.
현재 N명의 환자가 대기목록에 있습니다.
N명의 대기목록 순서의 환자 위험도가 주어지면, 대기목록상의 M번째 환자는 몇 번째로 진료
를 받는지 출력하는 프로그램을 작성하세요.
대기목록상의 M번째는 대기목록의 제일 처음 환자를 0번째로 간주하여 표현한 것입니다.


▣ 입력설명
첫 줄에 자연수 N(5<=N<=100)과 M(0<=M<N) 주어집니다.
두 번째 줄에 접수한 순서대로 환자의 위험도(50<=위험도<=100)가 주어집니다.
위험도는 값이 높을 수록 더 위험하다는 뜻입니다. 같은 값의 위험도가 존재할 수 있습니다.


▣ 출력설명
M번째 환자의 몇 번째로 진료받는지 출력하세요.


▣ 입력예제 1
5 2
60 50 70 80 90


▣ 출력예제 1
3


▣ 입력예제 2
6 0
60 60 90 60 60 60

 

▣ 출력예제 2
5

 


import sys 
from collections import deque
sys.stdin=open('input.txt','r')



if __name__=="__main__":
    N,M=map(int,input().split())            # N명, M번째 환자
    tmp=[[idx,val] for idx, val in enumerate(list(map(int, input().split())))]
    Q=deque(tmp)
    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:   # 첫 순서가 M번째 환자 드디어 
                break
    
    print(cnt)

 


 

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.