def solution(priorities, location):
prior = [ [i, priorities[i]] for i in range(len(priorities))]
for _ in range(len(prior)):
k = prior[1:]
k.sort(key=lambda x:x[1], reverse=True)
if(prior[0][1] < k[0][1]):
d = prior[0]
del prior[0]
prior.append(d)
answer = list(filter(lambda x:x[0]==location, prior))[0]
return prior.index(answer) + 1
예를 들어 [ 2, 3, 3, 1 ]이 주어졌다고 생각해보자.
첫 번째 인덱스 2보다 중요도가 높은 것이 있음으로 맨 뒤로 보낸다.
그 다음, [ 3, 3, 1, 2 ]에서 첫 번째 인덱스 3보다 중요도가 높은 것이 없으므로 두번 째 인덱스 3으로 초점을 이동시켜야 하는데 해당 과정을 실행하지 않고 멈춘 코드로 작성했다.
def solution(priorities, location):
prior = priorities.copy()
indexNum = [p for p in range(len(priorities))]
i = 0
while True:
if prior[i] < max(prior[i+1:]):
prior.append(prior.pop(i))
indexNum.append(indexNum.pop(i))
else:
i = i + 1
if i == len(prior) - 1:
break
return indexNum.index(location) + 1
while문을 멈춰야할 부분을 생각하지 못해서 i == len(prior) -1
로 모든 반복문을 다 돌려줬다. 효율성이 낮다.
def solution(priorities, location):
prior = priorities.copy()
indexNum = [p for p in range(len(priorities))]
i = 0
while True:
if prior[i] < max(prior[i+1:]):
prior.append(prior.pop(i))
indexNum.append(indexNum.pop(i))
else:
i = i + 1
if prior === sorted(prior, reverse = True):
break
return indexNum.index(location) + 1
결국 정답은 배열을 역순 정렬한 것과 같다. 이때 break를 걸어준다.