문제
https://programmers.co.kr/learn/courses/30/lessons/42587
코딩테스트 연습 - 프린터
일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린
programmers.co.kr
내 풀이
코드
def solution(priorities, location):
answer = 1
to_behind = len(priorities)-1
while priorities:
poped = priorities.pop(0)
for i in priorities:
if i > poped:
if location == 0:
location = to_behind
else:
location -= 1
priorities.append(poped)
break
else:
if location == 0:
break
to_behind -= 1
location -= 1
answer += 1
return answer
다른 풀이
다른 풀이1. max()이용
def solution(priorities, location):
answer = 0
while len(priorities):
if priorities[0] == max(priorities):
answer += 1
priorities.pop(0)
if location == 0:
return answer
else:
location -= 1
else :
priorities.append(priorities.pop(0))
if location == 0:
location = len(priorities) - 1
else :
location -= 1
return answer
다른 풀이2. max()와 리스트 이용
def solution(priorities, location):
pi_list = [(p, i) for i, p in enumerate(priorities)]
waiting_q = []
while pi_list:
pi = pi_list.pop(0)
priority = pi[0]
p_list = [priority for priority, idx in pi_list]
if p_list:
max_p = max(p_list)
if priority >= max_p:
waiting_q.append(pi)
else:
pi_list.append(pi)
for i, item in enumerate(waiting_q):
if item[1] == location:
return i + 1
최근 다시 풀어봄
def solution(priorities, location):
answer = 1
queue = [[v,i] for i, v in enumerate(priorities)]
while queue:
max_prior = max(queue,key = lambda x:x[0])
max_index = queue.index(max_prior)
if max_prior[1] == location:
return answer
answer += 1
queue += queue[:max_index]
queue = queue[max_index+1:]
return answer
이전 내 풀이보다 가독성이 좋아졌다.
'⏳ 알고리즘 > python 알고리즘 문제 풀이' 카테고리의 다른 글
알고리즘 문제 - LV1. 완주하지_못한_선수 (0) | 2020.01.23 |
---|---|
알고리즘 문제 - LV2. 위장 (0) | 2020.01.20 |
알고리즘 문제 - LV1. K번째 수 (0) | 2020.01.17 |
알고리즘 문제 - LV1. 가운데 글자 가져오기 (0) | 2020.01.17 |
알고리즘 문제 - LV2. 다리를 지나는 트럭 (0) | 2020.01.15 |