알고리즘

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

yjenis 2024. 6. 15. 15:30

 

문제 링크

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

문제

 

나의 풀이

1T

def solution(priorities, location):
    q = list(enumerate(priorities))

    cnt = 0
    while q:
        i = 0
        while i < len(q):
            should_pop = True
            for j in range(i + 1, len(q)):
                if q[i][1] < q[j][1]:
                    should_pop = False
                    break

            if should_pop:
                if q[i][0]==location:
                    return cnt+1

                cnt += 1
                q.pop(i)

            else:
                i += 1

 

1. prioprities를 인덱스와 함께 리스트로 만들었다.

2. 첫 번째 순서부터 순차적으로 기준점으로 삼으며 뒤에 오는 숫자들과 비교하였다.

(ex)0번째 수와 1~n-1번째 수 비교, 1번째 수와 2~n-1번째 비교)

3. 비교 결과 기준점이 되는 수가 가장 큰 수이면 pop을 한다.

4. 이런 방식으로 리스트에 담긴 요소가 없을 때까지 반복하며, location에 해당하는 인덱스가 pop되는 순서에 cnt를 return한다.

 

결과는

.

.

.

 

 

 

2T

def solution(priorities, location):
    queue =  [(i,p) for i,p in enumerate(priorities)]
    cnt = 0
    while True:
        cur = queue.pop(0)
        if any(cur[1] < q[1] for q in queue):
            queue.append(cur)
        else:
            cnt += 1
            if cur[0] == location:
                return cnt

 

1. enumerate를 활용해 idx와 값을 튜플로 만든다.

2. 가장 앞에 있는 걸 pop해서 그 값을 queue에 속한 값들과 비교한다.

3. 만약 queue에 있는 값중 더 큰 값이 있으면 pop한 값을 다시 queue 뒤에 넣는다.

4. 그렇지않다면 프로세스가 1회 실행되었으므로 cnt에 1을 더한다.

5. 또한 idx의 값이 location과 같다면 cnt를 return한다.