상세 컨텐츠

본문 제목

[프로그래머스]프린터(파이썬)

알고리즘 공부

by Tabris4547 2022. 3. 3. 23:05

본문

728x90

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

 

코딩테스트 연습 - 프린터

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

programmers.co.kr

문제가 중간에 짤려 추가설명을 하면

맨 앞단의 것을 기준으로

그보다 더 우선순위가 높은 게

뒤에 있다면

맨 앞에 있는 걸 뒤로 보내버립니다.

2번째 예제의 경우

1,1,9,1,1,1에서

1보다 9가 더 크기 때문에

1,9,1,1,1,1이 되고

여기서 맨 앞의 1보다 9가 크기 떄문에

9,1,1,1,1,1이 됩니다.

이제 9 뒤에 9보다 큰 게 없으니

9가 인쇄가 됩니다.

 

이 문제는 인쇄순서를 짜는 건

큐의 사용방법을 생각하면

쉽게 파악이 되었습니다.

문제는 인쇄순서를 return하는 것.

맨 처음 배열에서

location이 가리키는 위치에 있는 게

대체 몇 번째에 나오냐

처음에는 딕셔너리를 활용할 생각을 하다가

키(key)를 바꾸는 방법이 잘 안 찾아서

포기하고 리스트 상태에서

어떻게하면 해결할지 고민을 했습니다.

'그러면 location에 있던 숫자를 받고

그 숫자가 언제 출력되는지 구하면 되겠네?'

라고 생각해보니

2번째 예제에서 바로 걸렸습니다.

2번째 예제에서는 5로 출력이 되어야하는데

저렇게 1이 중복되어서 나올 경우엔

1이 가장 먼저 출력되는 경우를 구해보니

2가 출력이 되었습니다.

그렇다면 어떻게할까...

저는 먼저

현재 위치를 now_on으로 받았습니다.

이건 예제2를 기준으로 작성을 했는데요.

먼저, 처음엔 location이 0이라

now_on도 0입니다.

현재는 now_on이 맨 앞이지만

우선순위가 있는 것이 있어

맨 뒤로 보내고

now_on도 맨 뒤의 순서값인

5로 대입해줍니다.

그 다음, 다른 것이 뒤로 오게 되면

now_on에 있는 숫자값이 한자리 증가하므로

now_on에 1을 빼줍니다.(순번이 감소)

그리고 앞에서 pop을 해줄수록

계속 순번이 가까워지니

또 1을 빼줍니다.

그러다가, 마침내 맨 앞에 오게 되면

몇번째로 pop이 되었는지(인쇄되었는지)

리턴해줍니다.

 

def solution(priorities, location):
    #answer = location-1
    now_on=location
    poping=1 #인쇄순번 알려줌
    while priorities:
        now=priorities[0] #현재 맨 앞의 값을 기준으로 비교
        back=0
        for x in priorities:
            if now<x: #뒤에 우선순위가 더 높은 것이 있을 경우
                priorities.pop(0)
                priorities.append(now)
                back=1 #뒤로 보낸다
                if now_on==0:#만약 now_on이 맨 앞일 경우
                    now_on=len(priorities)-1
                else:#맨 앞이 아닐 경우
                    now_on-=1
                break
        if back==0:#뒤로 보내지 않았을 경우
            if now_on==0:
                return poping#찾고자하는 것이 맨 앞이면 몇 번째 인쇄인지 출력
            else:#그게 아니라면, 맨 앞에껄 pop(인쇄)해주고 순번을 앞당김
                priorities.pop(0)
                now_on-=1
                poping+=1

 

큐에 대한 공부와 더불어서

어떻게 순번을 고를지 생각할 수 있게 만들어주었던 문제였습니다.

728x90

관련글 더보기

댓글 영역