프로그래밍 공부방

[프로그래머스] 스택/큐_프린터 본문

프로그래밍/프로그래머스

[프로그래머스] 스택/큐_프린터

김갱갱 2022. 1. 13. 00:52

프로그래머스 (programmers.co.kr)

 

프로그래머스

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

programmers.co.kr


 

def solution(priorities, location):
    answer = 0
    index_order = list(map(str, range(len(priorities))))
      
    for num in range(len(priorities)):
        while max(priorities[num:len(priorities)]) != priorities[num]:   
            if priorities[num] < max(priorities[num:len(priorities)]): 
                priorities.append(priorities.pop(num))
                index_order.append(index_order.pop(num))
                
    answer = (index_order.index(str(location)))+1
    
    return answer

문제에서는 내가 인쇄를 요청한 문서가 몇 번째로 인쇄되는지 return하도록 요구했다.

그렇기 때문에 해당 문서가 몇 번째인지 알기 위해 각각의 문서에 인덱스를 할당했다.

나중에 index()를 사용해서 해당 문서의 인덱스를 알아낼 것이기 때문에 string형으로 할당을 했다.

 

우선 내가 이 문제를 풀기 위해 사용한 방식은 가장 중요도가 높은 문서를 제일 앞으로 보내고 이 문서보다 중요도가 낮은 문서는 뒤로 보내도록 했다. 이 작업을 모두 다 우선순위에 따라 정렬이 될 때까지 반복한다.

 

이제 코드를 보면 우선 num값부터 priorities의 맨 끝값까지를 범위로 해서 max값을 구해주었다.

→ 이 때 num값은 for문을 이용해서 0~priorities리스트의 길이만큼까지 1씩 증가하면서 들어가도록 했다.

이 때 최대값이 범위 안에서 맨 처음에 있지 않다면!! 최대값이 범위 안에서 제일 앞으로 이동하는 작업을 반복했다.

(※ max를 구하는 범위를 계속 바꿔주는 이유는 한 번 max값을 구한 후에는 이 max값을 제외한 나머지에서 또 max값을 구해주어야하기 때문이다.)

→ 위 작업이 어떤 것이냐면 현재 확인하려는 값이 최대값보다 작다면 이 값을 pop하고 이 pop한 값을 append를 이용해서 리스트의 뒤로 보냈다. 이 때 주의할 점은 index_order의 값도 함께 같은 작업을 해주어야 한다는 것이다. 그렇게 해야 해당 값과 인덱스가 올바르게 매치가 가능하다.

 

마지막으로 우선순위 순으로 정렬이 끝났다면 location(인쇄를 요청한 문서)의 index를 구한다.

처음에 index를 구하기 위해 string형으로 리스트를 만들었기 때문에 index(구하려는 값)를 사용해서 구할 수 있다.

순서가 0부터 시작하는 것이 아닌 1부터 시작해야하기 때문에 +1을 해준다.

 

 

😤 이 문제를 풀면서 좀 더 공부해야겠다고 생각된 부분 😤

1. 그 전에 푼 큐/스택 기능개발과 마찬가지로 좀 더 간단하게 풀기 위해서 파이썬의 큐/스택 모듈에 대해서 공부해야할 것 같다.