혜온의 이것저것

[코딩테스트 고득점 Kit] 스택/큐 프린트 - Python 본문

Algorithm/Programmers

[코딩테스트 고득점 Kit] 스택/큐 프린트 - Python

혜온 :) 2021. 9. 14. 16:40

[문제 이해 및 풀이]

최대값이 맨 앞에 있을 때에만 출력이 발생하고 최대값이 아닌 경우에는 순서가 올 때까지 리스트의 뒤로 들어가면서 인덱스가 계속 변하게 된다.

맨 처음에는 앞에 있는 값이 뒤로 간다는 것 때문에 deque의 rotate를 사용해야 하나 싶어 구현해 보려고 했지만 실패했다.

같은 숫자가 있는 두번째 예시와 같은 경우에는 숫자를 찾아도 그게 내가 원하는 값인지 아닌지 구별이 꼭 필요하다.

그래서 target을 명시해 주는 target 리스트를 새로 만들어 주었다.

priorities.pop(0) 값을 num에 저장해둔뒤 비교를 진행하였다.

최대값이 아니라면 최대값이 나올 때 까지 다시 리스트의 맨 뒤에 append 시켜줬다. 이때 target에서도 똑같이 움직였다.

최대값일때에는 내가 원하는 target값인지 확인을 한후, target이 아니라면 출력이 됐다고 처리하여 answer의 값을 하나 증가시키고, target이라면 answer 값을 return해주었다.


[나의 코드]

def solution(priorities, location):
    target=priorities.copy()
    answer=1
    target[location]='target'
    while(priorities):
        max_num=max(priorities)
        num=priorities.pop(0)
        if num == max_num:
            if target[0]=='target':
                return answer
            else:
                target.pop(0)
                answer+=1
        else:
            priorities.append(num)
            target.append(target.pop(0))

[다른 사람의 코드]

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

제출하고 다른 사람들의 코드를 확인하면서 부족한 부분을 공부하였다.

계속해서 변하는 리스트의 index값 때문에 target이라는 리스트를 새로 만들어 주었는데, enumerate를 사용하면 따로 리스트를 만들지 않아도 원래의 위치를 기억할 수 있었다.

또한 max를 따로 구해주지 않아도 any를 사용하면 좀 더 쉽게 비교할 수 있었다.

 

- 다음에 꼭 사용해 볼 것 : enumerate, any


문제출처 : https://programmers.co.kr/learn/courses/30/lessons/42587

 

코딩테스트 연습 - 프린터

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

programmers.co.kr

 

Comments