프로그래머스_프린터_python

2021. 7. 25. 17:35코딩테스트

반응형

 

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

 

중요도 순서로 인쇄.
location 문서가 몇번째로 인쇄되는지
숫자 클수록 중요.

 

from collections import deque
def solution(priorities, location):
    answer = 0
    d = deque([(v,i) for i,v in enumerate(priorities)])
    while len(d):
        item = d.popleft()
        if d and max(d)[0] > item[0]:
            d.append(item)
        else:
            answer += 1
            if item[1] == location:
                break
    return answer

[코드1]

deque를 사용. 반복문 사용해서 가장 먼저 들어온 값부터 체크함.

최대값보다 현재값이 작으면 맨뒤에 붙임. 크거나 같다면 순서인덱스만 추가. 현 인덱스가 타겟과 같다면 리턴

 

enumerate : 배열의 인덱스도 가져올수 있음.

deque)

 append, popleft

 *보통 queue는 선입선출

  deque는 양방향 큐. 앞, 뒤 양쪽 방향에서 엘리먼트(element)를 추가하거나 제거할 수 있다

  • deque.append(item): item을 데크의 오른쪽 끝에 삽입한다.
  • deque.appendleft(item): item을 데크의 왼쪽 끝에 삽입한다.
  • deque.pop(): 데크의 오른쪽 끝 엘리먼트를 가져오는 동시에 데크에서 삭제한다.
  • deque.popleft(): 데크의 왼쪽 끝 엘리먼트를 가져오는 동시에 데크에서 삭제한다.
  • deque.extend(array): 주어진 배열(array)을 순환하면서 데크의 오른쪽에 추가한다.
  • deque.extendleft(array): 주어진 배열(array)을 순환하면서 데크의 왼쪽에 추가한다.
  • deque.remove(item): item을 데크에서 찾아 삭제한다.
  • deque.rotate(num): 데크를 num만큼 회전한다(양수면 오른쪽, 음수면 왼쪽).

 

----------------------

def solution(priorities, location):
    queue =  [(i,p) for i,p in enumerate(priorities)]
    answer = 0
    while True:
        cur = queue.pop(0)
        if any(cur[1] < q[1] for q in queue):
            queue.append(cur)
        else:
            answer += 1
            if cur[0] == location:
                return answer

[코드2]

queue에 데이터 저장.(선입선출)

반복문에서 queue의 값을 가져옴.

가져온 값의 우선순위가 큐 내부의 다른 데이터보다 작으면 queue에 다시 append.

크거나 같다면 순서인덱스를 추가함. 현 인덱스가 타겟과 같다면 리턴.

 

any() : 하나라도 True인게 있으면 True. OR

all() : 모두 True여야 True 반환. AND

 ->param은 iterable한 객체를 받음. 이 객체를 돌면서 조건을 검사해 답을 True/False의 답을 반환.

반응형