문제 예시 2 질문
안녕하세요?
문제 예시 2의
입력 예제
6 0
60 60 90 60 60 60
에서 왜 답이 5인지 잘 이해가 안 갑니다!
문제에는 대기목록에 자기보다 위험도가 높은 환자가 없으면 자기가 진료를 받는 구조라고 하셨는데,
그러면 위의 예시에서 0 번째 환자가 진료를 받을 때는
당연히 2번째 아닌가 싶어서요
제 코드로는 두 번째, 다섯 번째 케이스에서 오답이 나오는데요
문제 설명에서 중복된 값이 있을 때 설명이 좀 이해가 잘 안 와 닿습니다.
from collections import deque
import sys
# sys.stdin = open('input.txt','r')
n, m = map(int, input().split())
p = list(map(int, input().split()))
queue = deque(p)
done = 0
target = queue[m]
res = 0
while queue:
maxx = max(queue)
a = queue.popleft()
if a < maxx:
queue.append(a)
else:
done += 1
if a == target:
res = done
print(res)
break답변 1
1
안녕하세요, 인프런 AI 인턴입니다.
thehrto12님, 문제 예시가 이해되지 않는 부분에 대해 혼동이 되셨군요. 이 문제는 환자들이 대기목록에 있고, 각자의 위험도에 따라 진료를 받게 되는 상황입니다. 주어진 입력 예제에서 6 0은 대기목록의 환자가 6명이고, 질문자님이 관심 있는 환자가 0번째에 위치한다는 의미입니다. 60 60 90 60 60 60은 각 환자의 위험도를 나타냅니다.
문제 설명에 따르면, 현재 환자보다 위험도가 높은 환자가 있다면, 그 환자는 대기목록의 맨 뒤로 이동합니다. 만약 대기목록에 자신보다 위험도가 높은 환자가 없다면, 현재 환자가 진료를 받습니다.
그래서 0번 환자가 진료를 받기 위해서는 자신보다 위험도가 높거나 같은 환자들이 먼저 진료를 받거나 대기열에서 제외될 때까지 기다려야 합니다. 주어진 예시에서 90은 가장 높은 위험도이고, 0번 환자보다 먼저 진료를 받게 됩니다. 그 후 남은 환자들의 위험도가 모두 60으로 동일하므로 처음에 0번 위치했던 환자가 진료를 받을 차례가 됩니다.
질문하신 코드에서 자신의 차례가 될 때까지의 카운트를 잘못 계산하신 것 같아요. 같은 위험도를 가진 환자가 여러 명일 때, 진료를 받은 후 대기목록에서 해당 위험도를 제거하는 로직에 문제가 있을 수 있습니다. 본래 문제에서 원하는 로직은, 원하는 환자의 순번이 정확히 언제인지를 찾아내야 한다는 점인데요, 이를 위해선 각 환자의 원래 순서도 함께 고려하여 queue에 넣어 처리해야 할 것 같습니다.
튜터링이나 문의하기를 통해서 더 자세한 도움을 받으시는 것도 좋은 방법입니다. 혹시 추가적으로 궁금한 사항이 있으시면 언제든지 문의해주세요.
감사합니다.
기존에 윈도우 10으로 잘 써왔는데 윈도우 11로 바꾸고 나서 채점이 안됩니다.
1
78
2
스택에서 ')'을 만나는 경우
0
79
3
문제가 어디있나요?
0
67
2
변수 or 함수명
0
61
1
침몰하는 타이타닉 문제 질문입니다
0
57
1
AA.py 책점 에러
0
60
1
오늘 구매했는데 파이썬 자료구조 궁금한거 있으면 답변이 잘 될까요.
0
111
2
5.동전분배하기 문제 밑에코드도 정답이될까요?
0
110
1
아나그램 비교 코드
0
116
2
AA.PY파일 복사 후 채점 진행할때 오류 발생합니다.
0
161
2
문제 링크가있나여?
0
147
2
채점기 Time Limit Exceeded 오류 문의
1
165
2
동적계획법은 사용하는 문제
0
126
2
제 코드 좀 봐주세요
0
148
1
예외가 존재할 가능성?
0
97
1
3번이 안풀립니다
0
93
0
5번 틀림
0
115
0
오류원인?
0
98
0
리스트 선언
0
107
1
침몰하는 타이타닉(그리디) 문제 질문
0
110
1
알고리즘
0
69
1
코딩테스트
0
92
1
DFS 순서 질문드립니다.
0
129
2
left, right를 사용한 풀이법에 대한 질문입니다
0
91
1





