[Python] 프로그래머스 - 42587번 : 프린터 (풀이 비교)

ossap·2022년 3월 1일
0

🤔 [Python] 문제 풀기

목록 보기
10/11

저번 스터디 이후로, 문제량이 너무 많아져서
깃허브에만 정리해서 업로드하고 있었습니다. (유용한 블로그를 위해 )

지금도 파이썬으로 진행하는 코테 준비 스터디장이 되어 매주 2회 스터디를 진행하고 있는데요,
스터디원이 내주신 문제 중에 전에 한 번 풀었던 문제가 있었습니다.
이번에 새로 풀면서, 시간이나 메모리 비교도 하고 코드도 의문점이 있어 리뷰해보겠습니다.

'프로그래머스 - 프린터' 풀이 비교

1. 이번 풀이

1) 코드

from collections import deque
def solution(priorities, location):
    answer = 0
    printlist = deque((n,p) for n,p in enumerate(priorities))

    maxpr = max(printlist, key = lambda x:x[1])

    while printlist:
        tmp = printlist.popleft()
        if tmp[1] < maxpr[1]:
            printlist.append(tmp)
        else :
            answer += 1
            if tmp[0] == location:
                break
            maxpr = max(printlist, key = lambda x:x[1])
    return answer

2) 결과

2. 예전 풀이

  • 의문점
    지난 풀이가 더 간단하게 생겨서 뜯어보니, 다른건 다 비슷한데
    튜플에서 max 계산시, 앞의 원소([0]번째)부터 계산하는걸 이용
    원소순서를 바꿔서 배치해, 우선순위를 0번째 원소로 만들어 비교했습니다.
    근데 의문점이 드는게,
    while문 안의 if문 조건에서 제가 왜인지 모르게 q를 넣었는데,
    q and 이조건을 빼주면 2,5,18번에서 런타임 에러가 납니다(아마 느려서 그런듯)
    근데 엄청 예전에 푼건지 q and 이조건이 이해가 안되네요 ㅠㅠ

제가풀고 제가 이해가안되는게 이상한데....생각이....안나네요...^_ㅠ..

1) 코드

def solution(priorities, location):
    from collections import deque
    q = deque([(p,i) for i,p in enumerate(priorities)])
    answer = 0

    while q:
        np = q.popleft()
        if q and max(q)[0] > np[0]:
            q.append(np)
        else :
            answer += 1
            if np[1] == location:
                break

    return answer

2) 결과

2. 예전 풀이 보고 이번 풀이 수정

1) 코드

from collections import deque
def solution(priorities, location):
    answer = 0
    q = deque((n,p) for n,p in enumerate(priorities))

    while q:
        tmp = q.popleft()
        if tmp[1] < max(q, key=lambda x:x[1])[1]:
            q.append(tmp)
        else :
            answer += 1
            if tmp[0] == location:
                break
    return answer

2) 결과 :

  • 2,5,18 런타임에러 (느려서 그런듯)
profile
오삽 : 오늘도 삽질

0개의 댓글