Algorithm (Python, Java, SQL)/Inflearn Study

[Python Algorithm] 자료구조(큐) - 응급실

sanadoing_ 2023. 3. 23. 17:52
728x90

> 자료구조 활용 - 스택, 큐, 해쉬, 힙 (큐 편)

 

 

📖 문제  : 응급실

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

• 환자가 접수한 순서대로의 목록에서 제일 앞에 있는 환자목록을 꺼냅니다.
• 나머지 대기 목록에서 꺼낸 환자 보다 위험도가 높은 환자가 존재하면 대기목록 제일 뒤로
다시 넣습니다. 그렇지 않으면 진료를 받습니다.

 

즉 대기목록에 자기 보다 위험도가 높은 환자가 없을 때 자신이 진료를 받는 구조입니다.

현재 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

n, m = map(int, input().split())
q = [(pos, val) for pos, val in enumerate (list(map(int, input().split())))]
	# [(0, 60), (1,50), (2,70)..] 이런식으로 튜플로 만들어짐
    
# print(q)
q = deque(q)
cnt = 0
while True:
    temp = q.popleft()
    if any(temp[1]<x[1] for x in q): 	# for문을 돌면서 하나라도 참이면 참이다(any). - 자신보다 더 응급도가 높은사람이 있다는 거
    	q.append(temp)	
    else:
    	cnt+=1
        if temp[0]==m:
	    print(cnt)
        	break

 

⭐️ Point ! ⭐️

  • q = [(pos, val) for pos, val in enumerate (list(map(int, input().split())))]
    # [(0, 60), (1,50), (2,70)..] 이런 식으로 리스트로 만들어진 원소들을 일일이 인덱스 값과 함께 튜플로 만들어짐

  • any() 함수
    하나라도 참이면 참 !

 

 

 

 

출처

  • 인프런 : 파이썬 알고리즘 문제 풀이
728x90