def solution(priorities, location):
answer = 0
# while을 적절히 사용할 수 있도록 하자
# while, pop, max 를 같이 사용하니까 훨씬 깔끔한 느낌!
while len(priorities) != 0:
# 대기목록 가장 앞에 있는 문서가 중요도가 가장 높은 경우
if priorities[0] == max(priorities):
answer += 1 # answer 는 인쇄된 문서의 개수
priorities.pop(0) # 먼저 인쇄 -> 대기목록에서 삭제!
if location == 0: # 내가 요청한 문서가 대기목록의 첫 번째에 있던 문서였다면
return answer # 첫 번째 인쇄된 문서가 내가 요청한 문서이므로 answer 반환
# 대기목록 가장 앞에 있는 문서가 중요도가 가장 높은 문서가 아니라면
else:
priorities.append(priorities.pop(0)) # 해당 문서를 대기목록 가장 뒤로 옮김
# pop 함수는 해당 요소를 반환(return)해준다는 점 기억하기!
# 옮기는 문서가 내가 요청한 문서라면?
if location == 0:
location = len(priorities) - 1
# 내가 요청한 문서의 위치는 priorities 의 가장 뒤
else: # 대기목록 제일 뒤로 옮긴 문서가 내가 요청한 문서가 아니라면
location -= 1 # 내가 요청한 문서의 위치는 한 칸 앞으로 옮겨짐
# 내가 요청한 문서가 몇 번째로 출력되는지 알고 싶은 것이므로 인쇄될 때마다 카운트 해준 answer 변수를 반환!
return answer
대충은 알겠는데 구현을 못해서 다른 사람들 코드를 보고 주석을 달며 이해하려고 해봤다 😯
반복문을 사용하면 무작정 for
문을 쓰려는 경향이 있는 것 같은데 while
을 적절히 사용하면 더 효율적으로 쓸 수 있다는 점을 주의해야겠다!
코드 제출하고 발견한 다른 사람들 풀이 중 신기했던(?) 것도 가져와봤다.
def solution(priorities, location):
queue = [(i,p) for i,p in enumerate(priorities)]
answer = 0
while True:
cur = queue.pop(0)
if any(cur[1] < q[1] for q in queue):
queue.append(cur)
else:
answer += 1
if cur[0] == location:
return answer
enumerate
, any
에 대해서 더 알아봐야겠다고 생각!문제 출처
https://programmers.co.kr/learn/courses/30/lessons/42587