본문 바로가기

PS/백준

[BOJ] 백준 1966 프린터 큐 (Swift)

반응형

문제

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

 

1966번: 프린터 큐

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

www.acmicpc.net

풀이

Queue 자료구조를 사용하여 풀 수 있습니다.
앞에 있는 문서를 삭제연산을 하고,
Queue의 요소들 중 중요도가 가장 높은 문서라면 그대로 삭제해줍니다.
삭제를 해줄 때, 몇개가 삭제되었는지 수를 세주어서 몇 번째로 삭제되었는지 확인할 수 있습니다.

Queue의 요소들 중 중요도가 더 높은 문서가 있다면, Queue에 다시 삽입시킨다면 자연스럽게 맨 뒤에 위치하게 됩니다.

중요도가 가장 높아서 삭제되었는데, 처음에 m번째로 놓여있는 문서라면 몇 번째로 삭제되었는지 출력해줍시다.
처음에 몇 번째에 놓여있는지 알기 위해서 입력을 받을 때, index의 값도 같이 저장해주었습니다.

저는 중요도와 index를 프로퍼티로 갖는 구조체 하나를 선언해주었습니다.
중요도를 비교하기 위해 Comparable 프로토콜을 채택해주었습니다.

또한 Queue를 index로 삭제연산을 구현해주었습니다.

사실 이 문제는 입력의 크기가 작기 때문에 removeFirst() 메서드를 사용해 Queue를 구현하여도 무방합니다.

소스코드

후기

removeFirst($O(n)$) 메서드 를 사용해서 구현해도 상관없지만, 삭제연산이 $O(1)$로 동작하는 Queue로 구현을 해보았습니다.
입력의 크기가 작아서 시간차이는 별로 없었습니다..

반응형