※ 문제링크
1966번: 프린터 큐
여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에
www.acmicpc.net
※ 관련개념
큐 (자료 구조) - 위키백과, 우리 모두의 백과사전
ko.wikipedia.org
해당문제는 큐를 활용해서 풀어야하는 문제였다. 큐에 대해서 간단하게 설명하면, 선입선출(First In First Out)방식으로 변수들을 삽입하고 추출하는 방식의 자료구조이다. 파이썬에서는 collections의 deque라는 양방향 큐를 사용할 수 있는 함수가 있어 해당 함수를 사용하여 결과를 도출하였다. 해당 라이브러리가 없어도 리스트로 구현을 할 수는 있으나 deque가 속도와 메모리면에서 훨씬 빠를 확률이 높으니 주어진 라이브러리를 적극적으로 활용하는게 좋다. 자세한 풀이방법과 코드는 아래와 같다.
1. 주어진 숫자와 가중치로 리스트를 생성하고, 숫자와 가중치를 매칭하여 2차원 리스트(NW_list)를 생성한다.
2. 가중치 리스트를 내림차순으로 정렬한 후 가중치 리스트와 매칭한 리스트(NW_list)를 deque로 선언해준다.
3. 조건문을 걸어 조건에 맞지 않으면 append와 popleft를 활용하여 맨 앞 요소를 맨 뒤 요소로 위치를 변경해준다. 매칭한 리스트(NW_list)에서 가중치가 최댓값과 같고 요구하는 인덱스 값과 일치하면 반복문을 중지하고 결과값을 출력한다.
from collections import deque
T = int(input())
for _ in range(T):
N, M = map(int, input().split())
N_list = deque([x for x in range(1, N+1)])
W_list = list(map(int, input().split()))
NW_list = []
for i in range(N):
NW_list.append([N_list[i], W_list[i]])
W_list.sort(reverse = True)
W_list = deque(W_list)
NW_list = deque(NW_list)
print(W_list)
check = 0
while True:
print(NW_list, check)
if NW_list[0][1] == W_list[0] and NW_list[0][0] == M+1:
NW_list.popleft()
W_list.popleft()
check += 1
break
elif NW_list[0][1] == W_list[0]:
NW_list.popleft()
W_list.popleft()
check += 1
else:
NW_list.append(NW_list[0])
NW_list.popleft()
print(check)
P.S 개발자가 되기위해 공부중입니다. 잘못된 부분을 댓글로 남겨주시면 학습하는데 큰 도움이 될 거 같습니다.
'알고리즘 > BOJ' 카테고리의 다른 글
[BOJ] 12865번 평범한 배낭 / 사용언어 : 파이썬(python) (0) | 2021.12.26 |
---|---|
[BOJ] 5430번 AC / 사용언어 : 파이썬(python) (0) | 2021.12.26 |
[BOJ] 1541번 잃어버린 괄호 / 사용언어 : 파이썬(python) (0) | 2021.12.24 |
[BOJ] 11399번 ATM / 사용언어 : 파이썬(python) (0) | 2021.12.24 |
[BOJ] 1931번 회의실 배정 / 사용언어 : 파이썬(python) (0) | 2021.12.24 |
댓글