[프로그래머스 / 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()
함수를 처음 알게 되었다.