[백준] 프린터 큐

백준 - 프린터 큐

프린터에 입력된 배열이 있을 때, 중요도를 확인 후 현재문서보다 중요도가 높은 문서가 하나라도 있다면 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))

=> enumeratelambda 에 대해서 정리필요…

태그:

카테고리:

댓글남기기