파이썬에서 any() 함수는 list의 원소를 필터링하거나 조건 검사할 때 사용하는 함수이다.
예를들어 test_list라는 이름의 리스트가 있다 해보자.
# Python3 code to demonstrate working of
# Check if any element in list satisfies a condition
# Using list comprehension
# initializing list
test_list = [4, 5, 8, 9, 10, 17]
# Check if any element in list satisfies a condition
# Using list comprehension
res = True in (ele > 10 for ele in test_list)
# Printing result
print("Does any element satisfy specified condition ? : " + str(res))
# Output
# Does any element satisfy specified condition ? : True
파이썬에서는 res = True in (ele > 10 for ele in test_list)라는 코드에서 볼 수 있듯이 리스트 내에서 원소를 지정해 조건을 만족하는지 검색할 수 있다. 위 코드는 n이 리스트의 길이라 할 때, O(n)의 시간복잡도를 가진다.
True in (...) : (...) 안에 쓰인 조건문으로 리스트를 검사한다. 조건을 만족하는 어떤 한 원소라도 존재한다면 True를 반환한다.
ele > 10 for ele in test_list : 리스트 검사 조건으로, 리스트 내부의 원소들이 10보다 큰지 검사한다.
이번에는 파이썬의 내장함수인 any() 함수를 사용하는 예제를 살펴보자. 이 함수는, 위 코드 예제처럼 리스트 내의 모든 원소를 검사하며, O(n)의 시간복잡도와 O(1)의 공간복잡도를 가진다. 또, 어떤 원소든 리스트 내의 조건을 만족하는 원소가 있는지 그 여부에 따라 True 혹은 False를 리턴한다.
# Check if any element in list satisfies a condition
# Using any()
res = any(ele > 10 for ele in test_list)
# Printing result
print("Does any element satisfy specified condition ? : " + str(res))
# Output
# Does any element satisfy specified condition ? : True
참고 : https://www.geeksforgeeks.org/python-check-if-any-element-in-list-satisfies-a-condition/
즉, 위에서 배운 any() 내장함수를 이용해서 if any(cur[1] < q[1] for q in queue) 라는 조건문으로 queue안의 모든 튜플들을 순회하면서 순회중인 튜플의 우선순위가 현재 프로세스에서 pop한 cur 튜플의 우선순위보다 큰지 확인하고, 조건을 만족하면 queue에 현재 프로세스를 다시 집어 넣는 방식으로 로직을 구현할 수 있다.
그리고 큐 안에 원소를 튜플로 집어넣었으므로, 조건을 만족하지 않는다면 실행 순번에 해당하는 answer를 증가시키고 간단하게 cur[0]이 타겟 프로세스 위치인지 검사하는 조건만 넣으면 답을 얻어낼 수 있다.