혜온의 이것저것

[코딩테스트 고득점 kit] 스택/큐 - 프린터 (Python) 본문

Algorithm/Programmers

[코딩테스트 고득점 kit] 스택/큐 - 프린터 (Python)

혜온 :) 2023. 4. 10. 14:45
문제 이해 및 풀이

우선 프린터의 우선순위 중에서 내가 원하는 프린트물이 언제 프린트 되는 지 확인해야하기 때문에 우선순위와 함께 움직일 인덱스 배열 num_idx를 만들어주었다.

우선순위가 제일 높은 값을 먼저 프린트해 줄 것이기 때문에 가장 높은 우선순위 값을 max로 구하여 max_num이라는 변수에 저장해두었다.

이후 priorities의 첫번째 값을 확인하여 max_num가 같다면 우선순위가 제일 높은 값이므로 priorities에서 제거해주고 해당하는 인덱스 값도 pop(0)해주고, 프린트 하나가 진행되었다는 표시로 answer값을 1씩 증가시켜준다.

이 때 num_idx의 값을 확인하여 내가 원하는 location값이면 answer를 return해준다.

만약 max_num이 아니라면 대기목록의 제일 마지막 순서로 이동하기 때문에 pop(0)한 값을 append시켜준다.

num_idx에서도 같은 작업을 해준다.

위 작업을 priorities에 아무 것도 남지 않을 때까지 반복해준다.

 

최종 코드
def solution(priorities,location):
    answer=0
    num_idx=[i for i in range(len(priorities))]
    while len(priorities)>0:
        max_num=max(priorities)
        num=priorities[0]
        if num==max_num:
            priorities.pop(0)
            check=num_idx.pop(0)
            answer+=1
            if location==check:
                return answer
        else:
            priorities.append(priorities.pop(0))
            num_idx.append(num_idx.pop(0))
    return answer

 

다른 사람 코드
def solution(priorities, location):
    queue =  [(i,p) for i,p in enumerate(priorities)]
    answer = 0
    while True:
        cur = queue.pop(0)
        if any(cur[1] < q[1] for q in queue):
            queue.append(cur)
        else:
            answer += 1
            if cur[0] == location:
                return answer

나는 max_num을 구하여 priorities의 첫번째 값이 max_num과 같은지 확인해주었는데 이 작업을 any를 사용하면 조금 더 간단하게 적용이 가능하다.

 

문제 출처

프로그래머스 코딩테스트 고득점 kit

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

 

프로그래머스

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

programmers.co.kr

 

Comments