반응형
작성코드 (런타임에러 발생)
def solution(priorities, location):
# (1) 필요한 변수 세팅
print_list=[(p,i) for i,p in enumerate(priorities)]
answer=0
p_list=[p for p,i in print_list]
p_max=max(p_list)
# (2) 실제 로직 수행
while True:
# (3) 현재 최상단큐의 중요도가 최대인 경우 출력함 (answer += 1)
if p_list[0] >= p_max:
a=print_list.pop(0)
p_list.pop(0)
answer += 1
p_max=max(p_list)
# (3-1) 출력하는 문서가 내가 요청한 문서일 경우
if a[1]==location:
break
# (4) 현재 최상단의큐의 중요도가 최대가 아닌 경우
else :
a=print_list.pop(0)
print_list.append(a)
p_list.pop(0)
p_list.append(a[0])
return answer
코드설명
(1) 필요한 변수 세팅
print_list
- priorities값과 인덱스를 함께 담은 변수입니다.
- 요청한 문서의 인덱스값을 판단할 때 사용하려고 합니다.
[(3,0),(2,1), (4,2),(1,3)]
p_list
- print_list에서 priorities(중요도)만 담은 배열입니다.
- 현재 큐(print_list)의 중요도 최대값을 구할 때 사용합니다.
p_max
- 현재 큐(print_list)의 중요도 최대값을 구할 때 사용합니다.
answer
- 몇번째로 출력됐는지에 대한 값입니다. (최종 결과값입니다.)
(2) 실제 로직 수행
- 반복문을 돌면서 현재 최상단큐의 중요도가 최대인지 아닌지 판별합니다.
- 요청한 문서가 출력될 때까지 반복합니다.
- if a[1]==location 가 참일 때까지 반복하고 break로 반복문을 빠져나옵니다.
(3) 현재 최상단의 큐의 중요도가 최대인 경우 (출력함)
if p_list[0] >= p_max
a=print_list.pop(0)
- 문서를 출력하기 위해 최상단 큐의 값을 빼냅니다.
p_list.pop(0)
- 출력한 문서의 중요도 값도 빼냅니다.
answer += 1
- 문서가 출력됐으니 출력 카운트 값을 1 증가시킵니다.
p_max=max(p_list)
- 출력된 문서는 큐에서 빠져나갔으니 현재 큐에서 중요도 최대값을 다시 구합니다.
(3-1) 출력하는 문서가 내가 요청한 문서인 경우 (프로그램 완료!)
if a[1]==location :
- 위에서 최상단 큐의 값을 변수 a에 담았습니다. (중요도값, 인덱스값)
- a[1]은 최상단 큐의 값에서 인덱스값입니다. 이 값이 location의 값과 같은 경우, 출력하는 문서가 내가 요청한 문서라는 의미입니다.
- 내가 요청한 문서를 출력했으니 반복문을 종료해도 됩니다. break 명령으로 반복문을 종료합니다.
(4) 현재 최상단의 큐의 중요도가 최대가 아닌 경우 (반복문 다시 수행)
else :
- p_list[0] < p_max 인 경우입니다.
- 현재 최상단의 큐의 중요도가 최대가 아니므로, 큐의 맨 뒤로 보내야 합니다.
a=print_list.pop(0)
- pop 함수를 사용해서 현재 최상단의 큐를 우선 빼냅니다.
print_list.append(a)
- 위에서 빼낸 값을 큐의 맨 뒤로 보내야 하므로 append 함수를 사용합니다.
p_list.pop(0) / p_list.append(a[0])
- 중요도 값을 갖고 있는 p_list 큐도 최상단 값을 빼내고 맨 뒤로 보냅니다.
python 개념
큐
- 빠지는 구멍과 들어가는 구멍이 다릅니다.
- pop(0) 함수를 사용해서 최상단의 큐의 값을 빼낼 수 있습니다.
- append() 함수를 사용해서 큐의 맨 뒤에 값을 넣을 수 있습니다.
enumerate() 함수
- 리스트나 튜플의 인덱스 값을 함께 출력해주는 함수입니다.
반응형
'프로그래밍 > 알고리즘 문제' 카테고리의 다른 글
[프로그래머스] 스택/큐 주식가격 (python) (4) | 2019.08.26 |
---|---|
[프로그래머스] 스택/큐 기능개발 (python) (4) | 2019.08.25 |
[프로그래머스] 스택/큐 다리를 지나가는 트럭 (python) (2) | 2019.08.22 |
[프로그래머스] 스택/큐 쇠막대기 (python) (8) | 2019.08.19 |
[프로그래머스] 스택/큐 탑 문제 (python) (132) | 2019.08.18 |
댓글