1 분 소요

응급실

문제 정리

입력

6 0
60 60 90 60 60 60

처리 과정

  1. 환자 리스트를 튜플 형태로 받기
  2. 리스트를 큐로 변경
  3. 큐에서 환자(cur)를 pop() 했을 때, 큐 안에 있는 다른 환자들 중에 현재 환자(cur)보다 위험도가 높은 환자가 있다면 현재 환자(cur)를 큐 맨 뒤로 붙이기
  4. 없다면 그 환자의 위험도가 가장 높기 때문에 진료 가능
  5. 진료한 환자가 m번째 환자라면 while문 종료

이 문제는 위험도가 같은 사람이 존재하기 때문에 정렬로 풀어서는 안됨!

출력

5

풀이

import sys
from collections import deque # deque라는 자료구조를 사용하기 위해 임포트
sys.stdin = open("./input/in6.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() # cur가 (0,60)이라면 cur[0]은 0(번째), cur[1]은 60(위험도)
    if any(cur[1]<x[1] for x in Q): # any의 조건문이 단 한번이라도 참이 되면 if문 성립
        Q.append(cur)
    else:
        cnt+=1
        if cur[0]==m: # cur[0]은 그 사람이 몇 번째였는지를 의미
            print(cnt)
            break

정리

  • lst=[(x,y) for x,y in enumerate(list(map(int,input().split())))]: 튜플 형태로 리스트 받기
  • Q=deque(lst): 튜플 리스트를 큐로 변경
  • cur=Q.popleft() 했을 때, 튜플의 각 요소는 cur[0]cur[1]로 접근 가능
  • any(cur[1]<x[1] for x in Q): 조건문이 단 한번이라도 참이 되면 if문 성립 & for x in Q와 같이 큐 안의 요소들 접근 가능


💛 개인 공부 기록용 블로그입니다. 👻

맨 위로 이동하기

태그:

카테고리:

업데이트: