코딩테스트
프린터
개발천재나천재
2023. 1. 5. 09:16
문제
https://school.programmers.co.kr/learn/courses/30/lessons/42587
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
"""
1. 2 1 3 2 -> A B C D
2. 1 3 2 2 -> B C D A
3. 3 2 2 1 -> C D A B
4. 2 2 1 -> D A B (C)
5. 2 1 -> A B (D)
6. 1 -> B (A)
7. (B)
출력 순서 -> C D A B
우선 순위 [2, 1, 3, 2] -> 3 2 2 1
인텍스 [0, 1, 2, 3] -> 2 3 0 1
문제해결방법
1. 인덱스와 우선순위를 deque로 만듬
2. 우선순위에서 max idx를 찾음 -> 찾은 idx 번수만큼 인덱스 queue를 popleft -> append
3. 우선순위 dq도 찾은 idx만큼 popleft() -> append
4. 우선순위 popleft(), 인덱스 popleft()
5. 1 ~ 4 반복
"""
from collections import deque
def solution(priorities, location):
answer = 0
dq_pri = deque(priorities)
dq_idx = deque()
for i in range(len(priorities)):
dq_idx.append(i)
while (True):
idx = dq_pri.index(max(dq_pri))
for _ in range(idx):
elem_pri = dq_pri.popleft()
elem_idx = dq_idx.popleft()
dq_pri.append(elem_pri)
dq_idx.append(elem_idx)
dq_pri.popleft()
_location = dq_idx.popleft()
answer += 1
if (_location == location):
break
return answer
출처 : https://school.programmers.co.kr/learn/courses/30/lessons/42587