【Algorithm】 [프머] 코딩테스트연습/ 스택, 큐/ 프린트
문제 : [https://programmers.co.kr/learn/courses/30/lessons/42587]
손코딩
< 나의 코드 >
def solution(priorities, location):
count = 1
waits = {}
for i in range(len(priorities)):
waits[i] = priorities[i]
values = list(waits.values())
max_value = max(values)
number_of_max = values.count(max_value)
while(1):
temp = next(iter(waits.items()))
key_first, value_first = temp[0], temp[1]
if value_first == max_value:
if key_first == location:
answer = count
break
else:
del waits[key_first]
count += 1
number_of_max -= 1
if number_of_max == 0 :
while(1):
max_value -= 1
number_of_max = values.count(max_value)
if number_of_max > 0 : break
else :
del waits[key_first]
waits[key_first] = value_first
answer = 0
return answer
< 눈여겨 봐야할 다른 사람 코드 >
배운점 :
1. 주어진 변수를 잘 이용하자. 괜히 추가적인 변수를 만들면 복잡해 진다.
2. 다양한 방법을 다양하게 고민해보아라. 좀 더 쉬운 방법은 무조건 있다. 창의적으로 생각하라
4. key value도 매력적인 방법이지만, 튜플을 이용하는게 이해가 쉬울 수 있다.
## 1번째
def solution(p, l):
ans = 0
m = max(p)
while True:
v = p.pop(0)
if m == v:
ans += 1
if l == 0:
break
else:
l -= 1
m = max(p)
else:
p.append(v)
if l == 0:
l = len(p)-1
else:
l -= 1
return ans
## 2번째
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