코딩테스트/programmers (python)

programmers / 프로세스(2단계) / python

seulll 2023. 12. 26. 20:13

*문제 출처는 프로그래머스에 있습니다.

코딩테스트 연습 - 프로세스 | 프로그래머스 스쿨 (programmers.co.kr)


 

모범답안

def solution(p, l):
    ans = 0
    m = max(p)
    while True:
        v = p.pop(0)
        if m == v:
            ans += 1
            if l == 0:
                break
            else:
                l -= 1
            m = max(p)
        else:
            p.append(v)
            if l == 0:
                l = len(p)-1
            else:
                l -= 1
    return ans
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

알고리즘

- any()함수를 이용해 리스트의 원소를 조건 검색한다.

- 큐의 첫 번째 데이터를 cur에 넣고 pop()함수를 사용해 제거한다.

- 큐에 들어있는 데이터의 값들이 cur의 값보다 큰지 비교한다

- 큐에 들어있는 모든 데이터가 cur 값보다 크면 cur을 다시 queue에 삽입한다.

- cur 값보다 큰 값이 없다면 answer 값을 1 증가 

- cur의 인덱스 값이 찾는 값의 위치인 location 값과 같다면 answer을 리턴