본문 바로가기

⏳ 알고리즘/python 알고리즘 문제 풀이

알고리즘 문제 - LV2. 프린터

문제

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

 

코딩테스트 연습 - 프린터

일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린

programmers.co.kr

 

내 풀이

코드

def solution(priorities, location):
    answer = 1
    to_behind = len(priorities)-1

    while priorities:
        poped = priorities.pop(0)
        for i in priorities:
            if i > poped:
                if location == 0:
                    location = to_behind
                else:
                    location -= 1
                priorities.append(poped)
                break
        else:
            if location == 0:
                break
            
            to_behind -= 1
            location -= 1
            answer += 1
            
    return answer

 

다른 풀이

다른 풀이1. max()이용

def solution(priorities, location):
    answer = 0
    while len(priorities):
        if priorities[0] == max(priorities):
            answer += 1
            priorities.pop(0)
            if location == 0:
                return answer
            else:
                location -= 1
        else :
            priorities.append(priorities.pop(0)) 
            if location == 0:
                location = len(priorities) - 1
            else :
                location -= 1
    return answer

 

다른 풀이2. max()와 리스트 이용

def solution(priorities, location):
    pi_list = [(p, i) for i, p in enumerate(priorities)]
    waiting_q = []

    while pi_list:
        pi = pi_list.pop(0)
        priority = pi[0]
        p_list = [priority for priority, idx in pi_list]
        if p_list:
            max_p = max(p_list)

        if priority >= max_p:
            waiting_q.append(pi)
        else:
            pi_list.append(pi)

    for i, item in enumerate(waiting_q):
        if item[1] == location:
            return i + 1

 

 

최근 다시 풀어봄

def solution(priorities, location):
    answer = 1
    
    queue = [[v,i] for i, v in enumerate(priorities)]
    while queue:
        max_prior = max(queue,key = lambda x:x[0])
        max_index = queue.index(max_prior)
        
        if max_prior[1] == location:
            return answer
        
        answer += 1
        queue += queue[:max_index]
        queue = queue[max_index+1:]
        
    return answer

이전 내 풀이보다 가독성이 좋아졌다.