나의 풀이
from collections import deque
def solution(priorities, location):
#priorities의 val은 우선순위를 나타낸다.
#우선순위가 높을 수록 먼저 출력된다.
#enumerate메서드를 써서 location을 구현하였다.
#location의 요소는 대기목록의 위치를 의미한다. 주의할 점은
#0이면 위치가 첫번째이고, 1이면 위치가 두 번째이다.
Q =[ (pos, val) for pos, val in enumerate(priorities)]
Q=deque(Q)
#deque([(0, 2), (1, 1), (2, 3), (3, 2)])
#0번째 문서는 우선순위가 2이고, 1번째 문서는 우선순위가 1이고, 2번째 문서는 우선순위가 3이다.
#우선순위가 높을 수록 먼저 인쇄된다.
#cnt는 출력되는 순서를 의미한다.
cnt=0
while True:
#current은 튜플형태로 저장되어 있으며, current[0], current[1]로 구분될 수 있다.
#current[0]은 location이며, current[1]은 priorities이다.
current=Q.popleft()
#나 자신보다 우선순위가 높은 "출력물"이 있어서
#popleft()를 하고, 다시 append()하는 경우에는 "출력되는 것이 아니라" 단순히 자리를 뒤쪽으로 옮기는 것에 불과하다.
#따라서 cnt에 아무런 영향을 주지 않는다.
if any(current[1]<x[1] for x in Q):
Q.append(current)
else:
#cnt+=1은 우선순위가 높아서 출력이 되었다는 의미
cnt+=1
#n번째 위치하고 있는 출력물이 출력될때의 "출력번 째는?"
if current[0]==location:
return cnt
다른 사람의 풀이
def solution(priorities, location):
jobs = len(priorities)
answer = 0
cursor = 0
while True:
if max(priorities) == priorities[cursor%jobs]:
priorities[cursor%jobs] = 0
answer += 1
if cursor%jobs == location:
break
cursor += 1
return answer
▶ deque를 사용하지 않았고, enumerate 또한 사용하지 않았다.
▶ 또한 % 연산자를 사용하여 cursor의 위치를 priorities길이로 한정하여 순환하였다.
▶ cursor%jobs는 cursor가 순환하는 index의 위치를 의미한다.
▶ answer은 "출력횟수"를 의미한다.
▶만약에 우선순위가 가장 큰 출력물을 발견하면, 그 출력물을 했으므로
출력횟수인 answer를 +1증가시킨다. 그리고 출력물의 자리를 우선순위를 0으로 바꾼다.
'프로그래머스(파이썬) > LV.2(파이썬)' 카테고리의 다른 글
전화번호 목록 →기준값 갱신+startswith()+숫자문자열 정렬★★ (0) | 2022.12.29 |
---|---|
뉴스 클러스터링→isalpha(), str1[i:i+2], set(), count()★★ (0) | 2022.12.28 |
기능 개발→ deque, 이중 while문★, 미친 for문★, 갱신★ (0) | 2022.12.27 |
튜플→Counter, 정규식, most_common(), split()★★ (0) | 2022.12.27 |
위장★★→ Counter(), reduce() 모든 요소의 곱 + 모든 요소에 +1 (0) | 2022.12.27 |