프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


나의 풀이

  • 원하는 location이 나올 때까지, 프린터 대기 목록을 수정하고, 위치 정보를 유지하는 것이 핵심이다.
  • 이를 위해서 [ic]priorities[/ic]와 [ic]location[/ic] 정보를 각각 queue에 담아 처리했다.
from collections import deque

def solution(priorities, location):
    # 위치 / 우선 순위 저장
    queue = deque(range(len(priorities)))
    priorities = deque(priorities)
    
    answer = 0
    while True:
        # 우선 순위 최고 값인 경우
        max_temp = max(priorities)
        if max_temp == priorities[0]:
            priorities.popleft()
            loc_temp = queue.popleft()
            answer += 1
            # 정답
            if loc_temp == location:
                break
        # 만족 X면 회전
        else:
            priorities.rotate(-1)
            queue.rotate(-1)
            
    return answer

 

다른 사람 풀이

  • [ic]priorities[/ic] 원소를 제거하지 않고 0으로 바꿔 location 따로 저장하지 않고도 해결했다.
def solution(priorities, location):
    answer = 0
    while True:
        max_num = max(priorities) # 리스트에서 가장 큰수를 구한다.
        for i in range(len(priorities)): # 리스트를 처음부터 확인한다 
            if max_num == priorities[i]: # 만약 가장 큰 수와 리스트의 요소와 일치하면
                answer += 1 # 프린트한 것으로 간주하고 answer에 1 추가 
                priorities[i] = 0 # 프린트한 요소는 0으로 표시 
                max_num = max(priorities) # 가장 큰 수를 다시 구한다.
                if i == location: # 만약 location과 i가 일치하면 answer을 반환한다. 
                    return answer