def solution(priorities, location):
answer = 0
cnt = 0
# 중요도가 높은 문서 먼저 인쇄
while len(priorities) > 0:
for i in priorities:
if priorities[0] > priorities[i]:
priorities.pop(0)
cnt += 1
else:
priorities[0], priorities[-1] = priorities[-1], priorities[0]
#list[-1]은 리스트에서 마지막의 값
for i in priorities:
if location = priorities[i]: #?
answer.append(i)
cnt += 1
return answer
효율성 풀이
def solution(priorities, location):
answer = 0
array1 = [c for c in range(len(priorities))] # index 위치 저장
array2 = priorities.copy() # 값 저장 (출력되는 값)
i = 0
while True:
if array2[i] < max(array2[i+1:]):
array1.append(array1.pop(i))
array2.append(array2.pop(i))
else:
i += 1
if array2 == sorted(array2, reverse=True):
break
return array1.index(location) + 1
def solution(priorities, location):
answer = 0
while len(priorities) > 0:
if priorities[0] == max(priorities): # 우선순위 확인
# 맨 앞 문서 인쇄
priorities.pop(0)
answer += 1
if location == 0: # 요청한 문서이면 반복문 종료
break
else:
# 맨 앞 문서를 대기 목록의 가장 마지막에 추가
priorities.append(priorities.pop(0))
location = location - 1 if location > 0 else len(priorities) - 1 # 요청 문서 위치 변경
return answer
def solution(priorities, location):
answer = 0
from collections import deque
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
그럼 어떻게 해야 좀 더 파이썬답게 인덱스(index)와 원소를 동시에 접근하면서 루프를 돌릴 수가 있을까?
바로 파이썬의 내장 함수인 enumerate()를 이용하면 되는데요. for 문의 in 뒷 부분을 enumerate() 함수로 한 번 감싸주기만 하면 됩니다.
>>> for entry in enumerate(['A', 'B', 'C']):
... print(entry)
...
(0, 'A')
(1, 'B')
(2, 'C')
enumerate() 함수는 기본적으로 인덱스와 원소로 이루어진 터플(tuple)을 만들어줍니다. 따라서 인덱스와 원소를 각각 다른 변수에 할당하고 싶다면 인자 풀기(unpacking)를 해줘야 합니다.