[백준] 프린터 큐
프린터에 입력된 배열이 있을 때, 중요도를 확인 후 현재문서보다 중요도가 높은 문서가 하나라도 있다면 queue의 가장 뒤에 재배치하고, 그렇지 않다면 바로 인쇄를 하는 것이다.
문제를 그대로 읽고 풀면 되는데 파이썬 문법이랑 자료구조가 익숙하지 않아서 힘들다…ㅠㅜㅠ
내 코드
test = input()
#테스트 수만큼 for문 돌기
while test==0:
n, m = map(int, input().split(' ')) #n: 문서의 개수 m:몇번째
q = list(map(int, input().split(' '))) #프린트할 큐
imp = q[m]
b = q.reverse() #중요도 큰 순으로 정렬한 것
count = 0 #몇번째로 인쇄되는지
result = []
#내가 원하는 문서가 올때까지 반복문
# 한번 돌때마다 index가 -1씩
while m==0:
data = q[0] #제일앞에 있는 문서의 중요도 확인
for i in range(1,n):
if data < q[i]:
q.append(data) #중요도가 높은 문서가 하나라도 있다면 가장 뒤에 배치한다.
break
del q[0] #그렇지 않다면 바로 프린트한다.(스택에서 dequeue)
count += 1
if m!=0:
m -= 1
result.append(count)
test -= 0
print('\n'.join(result))
=> 컴파일 에러나 런타임 에러가 발생하였다.
강사님 코드
test_case = int(input())
for _ in range(test_case):
n, m = list(map(int, input().split(' ')))
queue = list(map(int, input().split(' ')))
queue = [(i, idx) for idx, i in enumerate(queue)]
count = 0
while True:
if queue[0][0] == max(queue, key=lambda x: x[0][0]):
count += 1
if queue[0][1] == m:
print(count)
break
else:
queue.pop(0)
else:
queue.append(queue.pop(0))
=> enumerate
와 lambda
에 대해서 정리필요…
댓글남기기