[프로그래머스]level2-프린터-Python[파이썬]

s2ul3·2022년 10월 6일
0

문제링크

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

문제설명

알고리즘

  1. 내가 요청한 문서가 무엇인지 알고있어야하므로 내가 요청한 문서의 우선순위 뒤에 문자'0'을 추가했다.
  2. 우선순위를 담은 리스트 priorities를 큐에 담아준다.
    이때 리스트 내 원소들을 str로 바꿔준다.

❓str로 바꾸는 이유❓

내가 요청한 문서는 숫자 뒤에 '0'이 붙어있으므로 이를 인덱싱으로 판별하려면 str로 바꿔야한다.

cnt는 내가 요청한 문서가 몇번째에 인쇄되는지를 count하는 변수이다.
3. 우선순위 리스트 내 각 원소들의 첫번째 문자를 가져온다. (이것이 실제 우선순위 값들) 이것의 최댓값을 구하고 이를 max_q 변수에 담는다.
4. 큐에서 첫번째 원소를 뽑는다.

  • 큐에서 뽑은 원소 a의 첫번째 문자 a[0]이 max_q와 같다면 (즉 큐의 첫번째 원소가 최댓값인 경우 )
    --> cnt값은 1 증가 시킨다. 만일 이 원소가 내가 요청한 문서라면 cnt값을 return한다. 내가 요청한 문서인지 판별하는 방법은 a의 두번째 문자 a[1]이 '0'인지 확인하면 된다.
  • 큐에서 뽑은 원소 a의 첫번째 문자 a[0]이 max_q와 같지 않다면 (즉 큐의 첫번째 원소가 최댓값이 아닌 경우 )
    --> 뽑은 원소 a를 큐의 끝에 붙인다.

4번 과정을 큐가 빌때까지 반복한다.

코드

from collections import deque
def solution(priorities, location):
    # 내가 요청한 문서의 우선순위 뒤에 '0'추가.
    priorities[location] = str(priorities[location]) + '0'
    # 우선순위리스트 내 원소들의 자료형을 int에서 str로 바꿈
    q = deque(list(map(str,priorities)))
    cnt = 0
    while q:
        int_q = list(map(lambda x: int(x[0]), q))
        max_q = max(int_q)
        a = q.popleft()
        if int(a[0]) == max_q: # 큐의 첫번째 원소가 최댓값인경우 인쇄
            cnt+=1
            try:
                if a[1] == '0':
                    return cnt
            except:
                pass
        else: # 큐의 첫번째 원소가 최댓값이 아닌 경우, 끝에 추가
            q.append(a)
profile
statistics & computer science

0개의 댓글