[프로그래머스 / lv.2] 프린트
in Problem Solving on Programers
날짜: 2021년 12월 21일
소요 시간: 46분 21초
카테고리: 스택, 큐
태그: 레벨2, 파이썬
입출력 예시
| priorities | location | return |
|---|---|---|
| [2, 1, 3, 2] | 2 | 1 |
| [1, 1, 9, 1, 1, 1] | 0 | 5 |
내가 적은 코드
def solution(priorities, location):
answer = 1
doc_loc = list()
# 문서 인덱스를 담은 배열 생성
for idx, p in enumerate(priorities):
doc_loc.append(idx)
while priorities:
if priorities[0] == max(priorities):
if doc_loc[0] == location:
break
else:
priorities.pop(0)
doc_loc.pop(0)
answer += 1
elif priorities[0] != max(priorities):
priorities.append(priorities.pop(0))
doc_loc.append(doc_loc.pop(0))
return answer
풀이 과정
location을 확인 할 문서 인덱스를 담은 배열을 생성 한 뒤
priorities의 원소가 우선 순위가 가장 높은지를 확인하기 위해 max() 함수를 통한 비교로 우선순위가 가장 높은 지 반복하여 확인
- 만약 우선순위가 가장 높다면
doc_loc배열을 확인해서location과 일치한지 확인- 일치한다면 반복문을 종료
- 일치하지 않는다면
priorities와doc_loc의 0번째 인덱스의 값을pop()한 후answer에 1을 더함
doc_loc배열을 확인해서location과 일치하지 않는다면priorities와doc_loc의 0번째 인덱스의 값을pop()한 후append()하여 가장 뒤에 붙여줌
모든 과정이 반복되어 끝나거나 중간에location과 일치한 인덱스의 값이 나와 break 된다면answer반환
베스트 코드
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
리뷰
- 나는 따로
doc_loc배열을 만들어 주었는데 베스트 코드에서는 튜플로 만들어서 메모리를 아꼈다. - 저 중에 하나라도 있으면 true로 처리되는
any()함수를 처음 알게 되었다.
