알고리즘
[프로그래머스] 스택/큐 (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한다.