이번 문제도 카테고리가 큐/스택 이기때문에 queue
에 while
문을 잘 이용해서 풀어봐야겠다.
먼저 같은 중요도의 작업들이 있을 수 있으므로 priorities
의 원소들에 번호를 붙여서 로직을 돌리고 마지막에 location
의 순서를 리턴해주면 될 것 같다. 문제는 대기목록에 중요도가 더 높은 작업의 유무를 판별하는 것 인데, 대기목록의 최대값을 구해서 한 사이클마다 비교해보면 될 듯 하다.
priorities
의 원소들에 인덱스를 넣어서 새로 저장해줄 Queue
형태의 print
를 선언한다.complete
를 선언한다.Pair
형태로 새롭게 print
를 만든다.print
가 다 비워질때까지 poll
한 값을 start
로, print
를 내림차순으로 정렬한 것들중에 제일 큰 값을 max
로 선언한다.start
가 max
와 같지않으면 - 대기목록에 중요도가 더 높은 작업이 있는 것이기 때문에 현재의 값을 맨 뒤로 보내줘야 한다. print.add()
이용start
가 max
와 같으면 - 대기목록에 중요도가 더 높은 작업이 없는 것이기 때문에 그대로 출력.complete
에 저장이되면 그중 location
을 값으로 하는 인덱스+1을 answer
에 더해준다.레고레고
큐를 몇일 동안 사용해봐서인지 문제가 그나마 쉬워서인지 생각보다 빠르게 풀 수 있었다.
대기목록에 중요도가 더 높은 작업이 있으면 맨뒤로 보내는 부분을 어떻게 할지 몰라서 인터넷을 찾아봤었는데 그냥 add
를 해주면 되는것이었다.... queue
이기때문에 다른 함수들일거라고 생각해서인지 아예 떠오르지 않았었다.... 무튼 오늘도 하나 배웠다.
통과~!~!