파이썬/프로그래머스

[python] 프로그래머스 - 프린터

ariz1623 2020. 8. 5. 14:47

문제링크 :https://programmers.co.kr/learn/courses/30/lessons/42587

 

코딩테스트 연습 - 프린터

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

programmers.co.kr

 

 

 문제설명 

 

현재 대기목록에 있는 문서의 중요도가 순서대로 담긴 배열 priorities와 내가 인쇄를 요청한 문서가 현재 대기목록의 어떤 위치에 있는지를 알려주는 location이 매개변수로 주어질 때, 내가 인쇄를 요청한 문서가 몇 번째로 인쇄되는지 return 하는 solution 함수

 

 알고리즘 

 

처음에 푸는 문서 중요도가 똑같은 것 들 때문에 계속 테스트케이스를 통과하지 못했다.

그래서 다른 블로그를 참고하였다. ㅠ ㅠ

1. 문서중요도 리스트를 만들고 idx 리스트를 만듦

2. i 변수를 통해 프린터 되는 것을 처리한다.

3. 뒤에 문서 중요도가 나보다 높은것이 있으면 문서를 맨뒤로 보낸다.

4. 현재 문서의 중요도가 가장높으면 i +=1 해준다.

5. 만약 문서중요도를 정렬한 리스트와 현재 문서 의 리스트가 같다면 break 해준다.

6. 뽑아야하는 문서의 idx+1 을 return 한다.

 

 코드 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#프린터
 
def solution(priorities, location):
    
    value = []+priorities
    idx = [c for c in range(len(priorities))]
    
    i = 0
    while 1:
        #뒤에 문서중요도가 나보다 높은것이 있으면
        if value[i] < max(value[i+1:]):
            value.append(value.pop(i))
            idx.append(idx.pop(i))
        else :
            i+=1
        
        if value ==sorted(value,reverse=True):
            break
    return idx.index(location)+1
cs