-->

[프로그래머스] 스택/큐 - 프린터 (python)

스택/큐 - 프린터, 문제 확인

문제 설명은 아래와 같다.

 


대기목록의 가장 앞에 있는 문서의 중요도보다 높은 문서가 있다면, 해당 문서를 대기목록의 맨뒤로 보냄

없다면, 인쇄함

priorities : 대기목록에 있는 문서의 중요도가 담긴 배열

lcoation: 인쇄를 요청한 문서가 대기목록의 어떤 위치에 있는지 

내가 요청한 문서가 몇 번째로 인쇄되는지 return

 

 

예를 보면, [2,1,3,2]의 경우 아래의 순서대로 인쇄가 진행되고 lcoation이 2인 경우, 3을 의미하므로 가장 첫번째로 뽑히는 것을 알 수 있다. 따라서 return 값은 1이다.

 


초기) priorities=[2,1,3,2]

1) priorities=[1,3,2,2]

2) priorities=[3,2,2,1]

3) priorities=[2,2,1] #3이 첫번째로 인쇄됨

 

 

위 예시만 생각하고 처음엔 아래와 같이 코드를 작성했다. location에 해당하는 중요도 값을 backup에 담아두고 뽑히는 순서대로 추가한 ansewr 리스트에서 인덱스를 확인하는 방식이다.

 

def solution(priorities, location):
    answer=[]
    backup=priorities[location]
    while(len(priorities)!=0):
        if priorities[0]<max(priorities): #더 중요도가 높은 문서가 있다면
            priorities.append(priorities.pop(0)) #맨뒤로 보냄
        else: 
            answer.append(priorities.pop(0)) #없다면 pop하고 answer 리스트에 추가함

    return answer.index(backup)+1 #백업해둔 값이 answer 리스트의 몇번째에 위치하는지 확인

 

 

그런데 실행을 해보니, 중요도가 같은 값이 있는 경우를 생각하지 못했다.

 

 

 

따라서 location에 해당하는 중요도를 가진 문서가 맨 뒤로 가는 경우와 다른 문서가 뽑히는 경우 등에 따라 location 값을 직접 이동시켜주고 실제로 문서가 뽑히는 경우에 따른 count 값을 따로 사용했다.

 

def solution(priorities, location):
    count=0
    while(len(priorities)!=0):
        if location==0: #출력 여부를 확인되는 맨 앞순서로 왔을 경우
            if priorities[0]<max(priorities): #더 중요도가 큰 문서가 있으면
                priorities.append(priorities.pop(0)) #맨뒤로 보냄
                location=len(priorities)-1 #location을 맨끝으로 설정(배열길이-1)
            else: ##더 우선순위가 높은 것이 없다면 내꺼가 출력되는 것이므로 return으로 끝냄
                return count+1
        else:  
            if priorities[0]<max(priorities):
                priorities.append(priorities.pop(0))
                location-=1 #맨앞 요소가 뒤로 갔기 때문에 location이 1 줄어듦
            else: 
                priorities.pop(0) #맨앞요소 출력됨
                location-=1 #맨앞 요소가 출력됐기 때문에 location이 1 줄어듦
                count+=1 #(출력번째수 +1)

 

 

아래와 같이 모든 케이스를 통과하게 된다.

 

 

댓글

Designed by JB FACTORY