본문 바로가기
> 알고리즘 문제 풀이/프로그래머스

20/09- 프린터

by bky373 2020. 9. 29.
def findMax(waiting_docs):
    max_priority = 0
    for i in range(len(waiting_docs)):
        if waiting_docs[i][1] > max_priority:
            max_priority = waiting_docs[i][1]
    return max_priority

def solution(priorities, location):
    printed_docs = []
    indices = [i for i in range(len(priorities))]
    waiting_docs = list(zip(indices, priorities))
    hasMax = False

    while waiting_docs:

        max_priority = findMax(waiting_docs)
        curr_priority = waiting_docs.pop(0)

        for x in range(len(waiting_docs)):
            if waiting_docs[x][1] == max_priority:
                hasMax = True
                break
            else:
                hasMax = False

        if curr_priority[1] < max_priority:
            if hasMax:
                waiting_docs.append(curr_priority)
        else:
            printed_docs.append(curr_priority)

    for x in range(len(printed_docs)):
        if printed_docs[x][0] == location:
            return x+1

print(solution([2, 1, 3, 2, 2, 3], 5))

 

배운 점

1. 나는 zip을 사용하기 위해 indices 변수를 따로 만들었다.
   하지만 이 방법 대신 enumerate를 사용해 간단히 아래처럼 구현할 수 있다.

waiting_docs = [ p for p in enumerate(priorities) ]

 

2. max를 사용하지 않고, 현재 데이터보다 큰 값이 있는지 찾고자 한다면,
   if any( x < y for y in groupY) 등의 조건문을 활용할 수도 있다

3. 문제를 좀더 간단히 생각하는 연습이 필요하다.
   해당 문제에서는 나보다 큰 값이 뒤에 있다면 큐에 더해주고 아니면 출력하기만 하면 되는 문제였다...

4. 그런데, 다른 코드들과 비교했을 때 실행 시간은 위의 코드가 더 빠르다. 하지만 입력값이 많아지면
   차이가 있을 듯하다.

- 문제 출처 : programmers.co.kr/learn/courses/30/lessons/42587

 

 

'> 알고리즘 문제 풀이 > 프로그래머스' 카테고리의 다른 글

lv1-체육복 (python, 파이썬)  (0) 2020.10.19
lv1-완주하지 못한 선수  (0) 2020.10.18
20/09- 다리를 지나는 트럭  (0) 2020.09.28
20/09 - 기능개발  (0) 2020.09.21
20/09 - 주식가격  (0) 2020.09.20

댓글