def solution(priorities, location):
answer = 0
queue = [(i, p) for i, p in enumerate(priorities)]
while (True):
cur = queue.pop(0)
if any(cur[1] < q[1] for q in queue):
queue.append(cur)
else:
answer+=1
if (cur[0] == location):
return answer
역시 마찬가지로 내가 궁금한것들 위주로 리뷰를 진행해보겠다.
또한, 파이썬의 함수와 더불어 친숙해지기까지 시간복잡도, 공간복잡도와 같은 항목에 대해서 세세한 리뷰는 자재하려고 한다.
1. enumerate?
2. q[1] for q i queue?
1. 내장함수 enumerate
일단 기본적으로 파이썬에서 for문을 돌리는 방식에 대해서 알아보고자 한다.
>>> for letter in ['A', 'B', 'C']:
... print(letter)
...
A
B
C
파이썬에서는 for 루프는 기본적으로 for <원소> in <목록>: 형태로 작성이 되는데요. 여기서 <목록> 부분에는 리스트(list), 터플(tuple), 문자열(string), 반복자(iterator), 제너레이터(generator) 등 순회가 가능한 왠만한 모든 데이터 타입을 사용할 수 있습니다. <원소> 부분은 흔히 순회 변수(loop variable)라고 하는데, <목록> 부분에 넘긴 객체가 담고 있는 원소들이 루프가 도는 동안 하나씩 차례로 할당됩니다.
여기서 원소뿐만 아니라 index도 출력하고 싶을때 사용하는것이 enumerate 내장함수이다.
위의 코드에서는
queue = [(i, p) for i, p in enumerate(priorities)]
와 같이 원소값과 내장값에 동시에 접근하면서 for loop를 돌릴수 있게 해준다.
2. any 함수
자 any 함수의 내부 구조를 살펴보자.
def any(iterable):
for element in iterable:
if element:
return True
return False
iterable자료형을 받고 내부 element를 비교하면 true, fasle를 반환한다.
위의 코드를 살펴보자.
if any(cur[1] < q[1] for q in queue):
queue list에서 값을 꺼내온후, q[1]에 해당되는 값과 cur[1]에 해당되는 값을 비교하여 하나라도 맞을시 return을 반환한다.