취준/프로그래머스

[프로그래머스 Programmers][Python] 프린터

puff 2020. 1. 20. 19:16

문제 : https://programmers.co.kr/learn/courses/30/lessons/42587

 

코딩테스트 연습 - 프린터 | 프로그래머스

일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린터를 개발했습니다. 이 새롭게 개발한 프린터는 아래와 같은 방식으로 인쇄 작업을 수행합니다. 1. 인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼냅니다. 2. 나머지 인쇄 대기목록에서 J보다 중요도가 높은 문서가 한 개라도 존재하면 J를 대기목록의 가장 마지막에

programmers.co.kr

 

스택/큐 카테고리에 있는데, 그냥 큐를 쓰라는 문제같다.

하지만 귀찮고 + N이 100도 안나오고 + 답만 맞으면 된다는 트롤링급 문제풀이 방법에 따라 최적화 따윈 없는 끔직한 코드가 탄생했다.

 

푸는 방법은 다음과 같다.

  1. priorities 에서 맨 앞을 보고
    1. priorities[1:] 에서 맨 앞보다 중요도가 높은 원소가 있으면
      1. pop + append(파이썬 pop(0) 은 무려 O(N) 이다. ) 으로 뒤에 붙인 뒤 목표를 한칸 앞당긴다.
    2. priorities[1:] 에서 맨 앞보다 중요도가 높은 원소가 없으면
      1. 돌다보니 맨 앞 원소가 location 이었던 원소면 바로 답 반환
      2. 아니면 그냥 pop 후 배열, curloc 등을 1씩 앞당긴다.

 

def solution(priorities, location):
    answer = 1
    curloc = location%len(priorities)
    myp = priorities[location]
    pl = priorities
    while True:
        if pl[0] < max(pl):
            t = pl[0]
            pl.pop(0)
            pl.append(t)

            curloc = (curloc-1)%len(priorities)
        else:
            if pl[0] == myp and curloc==0:
                return answer
            else:
                pl.pop(0)
                answer+=1
                curloc = (curloc-1)%len(priorities)





    return answer