본문 바로가기

코딩테스트/백준

[Python] 백준 1966번. 프린터 큐

https://www.acmicpc.net/problem/1966

 

1966번: 프린터 큐

여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에

www.acmicpc.net

문제 설명:

우선순위가 가장 높은 순서인 게시물이 가장 앞에 있으면 꺼내준다. 이때 카운터를 해줘야 한다.

만약 우선순위가 높지 않은데 가장 앞에 있다면 뒤로 보내준다. 

내가 찾아야 할 우선순위가 나오면 카운터를 증가해주고 꺼내준다.

 

처음 헤맨것은 왜 이렇게 입력을 받는거지? 

가장 처음 몇 개의 case인지 알았고

1 0 -> 한장의 카드가 있고 0번째에 놓여있는지를 나타내고 있다.

그 이후로 이해가 되지 않았다.

3
1 0
5
4 2
1 2 3 4
6 0
1 1 9 1 1 1

알고보니! 3 셋트가 묶여있는것

1 0

한 셋트

 

4 2 -> 4장의 카드가 있고 뽑을 문서는 현재 2번째 위치에 있다.

1 2 3 4 -> 우선순위는 1 2 3 4 

한 셋트 

즉 내가 뽑고 싶은 카드는 2번째자리(0부터 시작하기 때문에) 즉 우선순위 3을 가지고 있다.

 

코드를 짜보자.

1. 카드의 숫자-> 자리(0부터 시작) index 라고 하자 / 우선 순위를 매칭 시켜주는 튜플을 생성 할 것이다.

printer = []
prior = list(map(int, input().split()))

    index = 0
    for value in prior:
        printer.append((value,index))
        index += 1

 

2. 그 다음 printer 에 들어있는 요소를 꺼내어 우선순위가 가장 높은지 확인한다.

    만약 우선순위가 높지 않다면 뒤로 다시 넣어줄 것

    우선순위가 맞다면 cnt 값을 증가시켜줄 것

while True:
        check = printer.pop(0)
        if all(check[0] >= x[0] for x in printer):
            cnt += 1
        else:
            printer.append(check)

 

3. 내가 찾고싶은 요소의 값이 있다면 if문에 pop 했을 것

    그렇기 때문에 더 이상 printer에 존재하지 않는다.

     그럼 이걸 미리 복사해서 tmp = printer.copy() 해서 tmp[M] 의 값이 printer에 없다면

     내가 찾을 요소는 이미 빠져나가 이때 cnt을 확인하면 되지 않을까?

 

tmp = printer.copy()
    cnt = 0

    while True:
        check = printer.pop(0)
        if all(check[0] >= x[0] for x in printer):
            cnt += 1
        else:
            printer.append(check)
        if tmp[M] not in printer:
            print(cnt)
            break

 

 

 

'코딩테스트 > 백준' 카테고리의 다른 글

[Python] 백준 17219. 비밀번호 찾기  (0) 2023.10.20
[Python] 백준 1920. 수 찾기  (0) 2023.10.20
백준 2164. 카드2  (1) 2023.10.19
백준 1874번. 스택수열  (1) 2023.10.18
Valid Parentheses  (0) 2023.10.18