def findMax(waiting_docs):
max_priority = 0
for i in range(len(waiting_docs)):
if waiting_docs[i][1] > max_priority:
max_priority = waiting_docs[i][1]
return max_priority
def solution(priorities, location):
printed_docs = []
indices = [i for i in range(len(priorities))]
waiting_docs = list(zip(indices, priorities))
hasMax = False
while waiting_docs:
max_priority = findMax(waiting_docs)
curr_priority = waiting_docs.pop(0)
for x in range(len(waiting_docs)):
if waiting_docs[x][1] == max_priority:
hasMax = True
break
else:
hasMax = False
if curr_priority[1] < max_priority:
if hasMax:
waiting_docs.append(curr_priority)
else:
printed_docs.append(curr_priority)
for x in range(len(printed_docs)):
if printed_docs[x][0] == location:
return x+1
print(solution([2, 1, 3, 2, 2, 3], 5))
배운 점
1. 나는 zip을 사용하기 위해 indices 변수를 따로 만들었다.
하지만 이 방법 대신 enumerate를 사용해 간단히 아래처럼 구현할 수 있다.
waiting_docs = [ p for p in enumerate(priorities) ]
2. max를 사용하지 않고, 현재 데이터보다 큰 값이 있는지 찾고자 한다면,
if any( x < y for y in groupY) 등의 조건문을 활용할 수도 있다
3. 문제를 좀더 간단히 생각하는 연습이 필요하다.
해당 문제에서는 나보다 큰 값이 뒤에 있다면 큐에 더해주고 아니면 출력하기만 하면 되는 문제였다...
4. 그런데, 다른 코드들과 비교했을 때 실행 시간은 위의 코드가 더 빠르다. 하지만 입력값이 많아지면
차이가 있을 듯하다.
- 문제 출처 : programmers.co.kr/learn/courses/30/lessons/42587
'> 알고리즘 문제 풀이 > 프로그래머스' 카테고리의 다른 글
lv1-체육복 (python, 파이썬) (0) | 2020.10.19 |
---|---|
lv1-완주하지 못한 선수 (0) | 2020.10.18 |
20/09- 다리를 지나는 트럭 (0) | 2020.09.28 |
20/09 - 기능개발 (0) | 2020.09.21 |
20/09 - 주식가격 (0) | 2020.09.20 |
댓글