✅ 나의 풀이
def solution(priorities, location):
waiting = [(i,j) for i,j in enumerate(priorities)]
complete = []
while waiting :
if waiting[0][1] < max(waiting, key = lambda x:x[1])[1] :
waiting.append(waiting[0])
waiting.pop(0)
else :
complete.append(waiting[0])
waiting.pop(0)
for num, i in enumerate(complete) :
if i[0] == location :
return num+1
[ (0,2), (1,1) , (2,3) , (3,2) ] 와 같이 (처음 시작할 때의 인덱스, 우선순위) 의 튜플 형태로 waiting(대기목록) 리스트에 저장하였다.
만약 대기목록의 맨 앞에 있는 튜플이 최대 우선순위가 아니라면?
대기목록의 맨 뒤로 보낸다.
-> waiting.append(waiting[0])
waiting.pop(0)
최대 우선순위라면 ?
complete 리스트에 저장하고, waiting 대기목록리스트에서 제거한다.
-> complete.append(waiting[0])
waiting.pop(0)
내 코드의 안좋은점
1) 모든 문서를 출력한다. -> location 에 해당하는 문서가 인쇄되면 break 를 통해 반복문을 탈출해야 한다
2) 완성된 문서를 저장하는 리스트를 만들어서, 출력된 문서를 반복문으로 돌면서 location 에 해당하는 문서의 인덱스를 찾는 불필요한 과정이 포함되었다. -> 출력될 때마다 +1 을 하는 변수로 해결가능
이를 모두 보완하는 코드는 아래에 있다.
✅ 다른 풀이
def solution(priorities, location):
q = [(i, p) for (i, p) in enumerate(priorities)]
answer = 0
while q:
front = q.pop(0)
if any( front[1] < doc[1] for doc in q ):
q.append(front)
else:
answer += 1
if front[0] == location:
break
return answer
내 코드보다 좋은 점
1) max대신 any 를 사용하여 더욱 직관적이다.
2) 만약 맨 앞에 있는 문서의 우선순위가 가장 높은 경우라면 바로 출력이 된다. -> 즉, 이때 complete 라는 불필요한 리스트에 이를 추가한 것이 아니라, 이 문서의 인덱스가 location 과 일치하다면 바로 반복문을 탈출한다.
또한 출력되는 문서의 갯수를 answer 로 표기하여, 해당 location 의 문서가 몇 번째로 출력되는지 바로 확인할 수 있다.
👏🏻👏🏻👏🏻👏🏻👏🏻👏🏻
'알고리즘 > 스택,큐' 카테고리의 다른 글
[프로그래머스] 주식가격 - 파이썬(python) (0) | 2022.09.03 |
---|---|
[프로그래머스] 다리를 지나는 트럭 - 파이썬(python) (1) | 2022.09.03 |
[프로그래머스] 올바른 괄호 - 파이썬(python) (0) | 2022.09.02 |
[프로그래머스] 같은 숫자는 싫어 - 파이썬(python) (0) | 2022.09.02 |
[프로그래머스] 기능개발 - 파이썬(python) (0) | 2022.05.07 |
댓글