https://school.programmers.co.kr/learn/courses/30/lessons/42587
쉽게 생각했다가 큰 코 다쳤다.
나는 처음에 아래와 같은 방식으로 문제를 풀려고 시도 했다.
1. priorities[location] 보다 우선순위가 큰수만 필터링: 우선순위가 큰 순으로 정렬: bigger
2. priorities[location] 과 같은수만 필터링: 인덱스 번호가 작은 순으로 정렬: eq
3. priorities[location] 보다 우선순위가 큰수만큼 ans 에 더함
4. eq 를 순회하며 location과 같은 index 를 만날때까지 ans+1
5. location과 같은 index 를 만나면 ans return
위와 같은 방법으로 계속 틀렸고, 우선순위가 큰 수의 마지막 index 보다 location이 작은 경우에 대한 추가 처리를 작성하다가 코드가 너무 복잡해지고 잘못된 방향으로 가고 있다는 생각이 들어서 다른사람의 풀이 를 보고 힌트를 얻어 아래와 같이 문제를 해결하였다.
from collections import deque
def solution(priorities, location):
ans = 0
d = deque([(i, v) for i, v in enumerate(priorities)])
while True:
i, v = d.popleft()
if any(v < q[1] for q in d):
d.append((i, v))
else:
ans += 1
if i == location:
return ans
1. 값과 인덱스를 갖고 있는 deque를 생성한다.
2. deque 의 첫번째 요소를 꺼낸 후, deque 의 나머지 요소중 우선순위가 더 높은게 있는지 검사한다.
3. 우선순위가 더 높은게 있다면 deque의 마지막으로 해당 작업을 추가한다
4. 우선순위가 높은게 없다면 처리대상이므로 결과값에 1을 더한후, 현재 처리한 값의 인덱스가 location과 일치하는지 검사한다.
5. 일치한다면 location 의 프로세스를 수행한 것이므로, ans 를 리턴한다.
소감: 한동안 알고리즘을 안 풀었더니 머리가 굳어버린듯하다. 앞으로는 아무리 시간이 없더라도 왠만하면 하루에 한 문제씩은 풀어야겠다.