(프로그래머스 with python) 프린터
프린터 (Level2)
우선순위 리스트에서 location위치에 있는 값이 몇번째로 인쇄되는지에 대한 문제이기 때문에 우선수위 값과 인덱스의 값이 함께 기억이 되야 한다는 것을 알았다. 하지만 어떤 방법으로 기억시켜야 되는지에 대해 몰라서 헤맸다..^^ enumerate 함수를 쓰면 간단하게 해결된다..ㅎㅎ(저번주에 사용해봤는데… 정리를 해놔야겠다)
priority_list = [(i, num) for i, num in enumerate(priorities)]
# [(2, 3), (3, 2)] ...
- priority_list의 첫번째 값을 pop(0)을 이용해 빼온다 # (2, 3)
- 새로운 p_list를 만들어 이곳에다 priorit_list에 담긴 값들만을 (index값 아님 주의 !) 뽑아서 리스트에 넣어준다 # [3, 2, ..]
- 이후 p_list에서 max의 값을 찾아내어 1번에서 빼온 튜플에서 값과 비교를 한다
- 튜플에서 빼온 값이 max값과 같거나 큰경우 우선순위가 가장 큰 값이기 때문에 튜플 자체의 값을 새로운 리스트인 new_list에 담아준다
- 이후 똑같은 로직으로 new_list에 담아준다 # new_list = [(2,3), (3, 2)]
- 이후에 new_list를 enumerate를 사용하여 정해져있던 location과 튜플안에 있는 인덱스값을 비교해 해당 하는 값이 몇번째로 출력이 되는지를 반환한다
def solution(priorities, location):
priority_list = [(i, num) for i, num in enumerate(priorities)] # enumerate로 인덱스와 값을 튜플로 묶는다
new_list = []
while priority_list:
index = priority_list.pop(0) #(0,2) # - 1
priority_num = index[1]
p_list = [priority for index, priority in priority_list] # - 2
if p_list:
max_num = max(p_list) # - 3
if priority_num >= max_num: # - 4, 5
new_list.append(index)
else:
priority_list.append(index)
print('new_list',new_list)
for i, item in enumerate(new_list): # 0, (0,2) - 6
print(i, item)
if item[0] == location: # 인덱스로 비교해야 하기 때믄에
return i + 1