다 풀어놓고 한 줄 때문에 하루를 삽질했다. 로직은 분명히 맞다고 생각했고 도저히 예외가 떠오르질 않았다. 질문 목록에서 가르쳐 주는 모든 예외를 다 넣어봐도 맞게 나왔었다.
다 풀었다고 생각했는데 시간초과도 아니고 예외도 도저히 없는데 자꾸 틀렸다 하니까 답지를 보기도 좀.. 짜증이 나더라
정현이 형이 한방에 해결해줬다. 현재 비교하는 인덱스 위치를 기억하기 위해 최대값을 뽑아냈을 때 해당 값을 pop하고 젤 뒤에 0을 push 해준다.
최대값일 때는
priorities.pop(0)
priorities.append(0)
이렇게 잘 해놓고
다시 돌아서 0을 만났을 때는 그냥 pop만 했었다.
def solution(priorities, location):
answer = 0
lenP = len(priorities)
answerNum = priorities[location]
cnt = 0
answer = 0
while priorities:
# input()
# print("cnt = ", cnt)
if cnt == lenP:
cnt = 0
# print("change cnt = 0 ")
X = priorities[0]
# print("X = ", X)
if X == 0:
priorities.pop(0)
priorities.append(0)
cnt += 1
continue
if max(priorities) == X:
# print("this is max")
answer += 1
# print("answer = ", answer)
priorities.pop(0)
priorities.append(0)
# print("priorities = ", priorities)
if cnt == location and X == answerNum:
# print("Find Answer ")
return answer
else:
priorities.append(priorities.pop(0))
# print("after = ", priorities)
cnt += 1
# 1. 인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼냅니다.
# 2. 나머지 인쇄 대기목록에서 J보다 중요도가 높은 문서가 한 개라도 존재하면 J를 대기목록의 가장 마지막에 넣습니다.
# 3. 그렇지 않으면 J를 인쇄합니다.
# 1개 이상 100개 이하의 문서가 있습니다.
# priorities = [2, 1, 3, 2]
# location = 2
# priorities = [1, 1, 9, 1, 1, 1]
# location = 0
# 1
priorities = [1,2,3,2,1]
location = 0
# 5
print(solution(priorities, location))
def solution(priorities, location):
answer = 0
lenP = len(priorities)
answerNum = priorities[location]
cnt = 0
answer = 0
while priorities:
if cnt == lenP:
cnt = 0
X = priorities[0]
if X == 0:
priorities.pop(0)
priorities.append(0)
cnt += 1
continue
if max(priorities) == X:
answer += 1
priorities.pop(0)
priorities.append(0)
if cnt == location and X == answerNum:
return answer
else:
priorities.append(priorities.pop(0))
cnt += 1
print(solution(priorities, location))
deque를 쓰면 절반정도 빠르다고 한다. (시간 초과가 나왔으면 이거라도 해봤을텐데 답이 틀렸다고 나오니...)
def solution(priorities, location):
answer = 0
from collections import deque
d = deque([(v,i) for i,v in enumerate(priorities)])
while len(d):
item = d.popleft()
if d and max(d)[0] > item[0]:
d.append(item)
else:
answer += 1
if item[1] == location:
break
return answer