반응형
https://programmers.co.kr/learn/courses/30/lessons/42587?language=python3
def solution(priorities, location):
prList = [(p, i) for i, p in enumerate(priorities)] # 우선순위와 인덱스를 튜플로 묶어 저장
que = [] # 프린트될 순서의 인덱스 리스트
# 프린트될 순서 구하기
while prList:
pList = [p for p, i in prList]
p = prList.pop(0)
if p[0] >= max(pList): # 최대 우선순위 값의 인덱스를 que에 저장
que.append(p[1])
else: # 최대 우선순위가 아니라면 prList의 맨 뒤에 저장
prList.append(p)
return que.index(location) + 1
우선순위 정보와 그 우선순위의 인덱스 값이 필요하므로 두 개의 값을 튜플로 묶어 리스트로 prList에 저장합니다. while문을 통해 prList에 값이 없을 때까지 코드를 반복합니다. prList에서 우선순위로 높은 순서대로 값을 빼서 프린트 순서를 que에 저장할 것이므로 prList에서 우선순위값만 가져와 pList에 저장합니다. prList에 저장된 값이 계속 변하므로 pList도 계속 변하게 됩니다. prList에서 첫번째 값을 가져와 최대 우선순위와 같다면 que에 인덱스 정보를 저장하고 그렇지 않다면 대기목록의 맨 뒤로 보내주기 위해 prList의 맨 뒤에 저장합니다.
location의 프린트 순서를 리턴해야하므로 index()를 통해 que에서의 위치정보를 가져와 +1 하여 리턴해줍니다. ( +1 하는 이유는 순서가 1부터 시작이므로!)
- 배운 점 -
enumerate() - 반복문 사용시 몇 번째 반복문인지 알고 싶을 때 사용하는 함수입니다. 인덱스 번호와 리스트 값을 튜플 형태로 반환해줍니다. 다음 예시를 참고해주세요
t = [1, 5, 7, 33, 39, 52]
for p in enumerate(t):
print(p)
# 출력
(0, 1)
(1, 5)
(2, 7)
(3, 33)
(4, 39)
(5, 52)
다른 사람들의 풀이를 보니 많은 공부의 필요성을 또 다시 느꼈습니다... 찾아보니 이 문제는 다양한 코드가 있는 것 같습니다.
# deque 사용
from collections import deque
def solution(priorities, location):
answer = 0
d = deque([(v,i) for i,v in enumerate(priorities)])
while len(d):
item = d.popleft()
if d and max(d)[0] > item[0]:
d.append(item)
else:
answer += 1
if item[1] == location:
break
return answer
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
반응형
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스/Python] 다리를 지나는 트럭 - Level2 (0) | 2021.05.25 |
---|---|
[프로그래머스/Python] 주식가격 - Level2 (0) | 2021.05.24 |
[프로그래머스/Python] 기능개발 - Level2 (0) | 2021.05.21 |
[프로그래머스/Python] 다트게임 (0) | 2021.05.19 |
[프로그래머스/Python] 비밀지도 (0) | 2021.05.18 |