반응형
https://school.programmers.co.kr/learn/courses/30/lessons/42587
문제 풀이
같은 우선순위 일 때, 구별하기 위해 2차원 배열로 나누었다.
2차원 배열로 만들어 2번째 값을 location에 해당하는 값, 다시 말해 내가 알고자 하는 인쇄물에 체크하고 deque를 사용해 계속 돌려주었다.
우선순위에 밀리면 뒤로 밀어내고, 우선순위에 맞다면 내가 찾는 값인지 체크를 확인한다. 만약 체크가
되어있지 않다면 빼내고 계속 돌린다.
정답 코드
from collections import deque
def solution(priorities, location):
answer = 0
point = deque(priorities)
for i in range(len(priorities)):
if i!=location:
point.append((point.popleft(),0))
else:
point.append((point.popleft(),1))
priorities.sort()
while True:
if priorities[-1] != point[0][0]:
point.append(point.popleft())
else:
if point[0][1] == 1:
answer+=1
break
else:
priorities.pop()
point.popleft()
answer+=1
return answer
다른 풀이
enumerate 함수를 사용해 더 간단하게 풀 수도 있다.
enumerate 함수를 사용해서 (우선순위, 리스트의 인덱스)를 deque에 넣어준다.
*enumerate는 리스트의 원소에 순서값(우선순위)를 부여해줄 수 있는 함수이다.
우선순위가 제일 높은 원소는 뽑고, 높지 않다면 큐의 맨 끝자리에 다시 추가해준다.
만약 중요도가 제일 높고, 몇 번째로 인쇄되는지 알고싶은 위치의 원소가 뽑히게 된다면 break 후
순서를 출력하면 된다.
from collections import deque
def solution(priorities, location):
cnt = 0
arr = []
for i,v in enumerate(priorities):
arr.append((i,v))
print(arr)
queue = deque(arr)
while queue:
x = queue.popleft()
for i in range(0,len(queue)):
if x[1] < queue[i][1]:
queue.append(x)
print(x)
break
else:
cnt += 1
if x[0] == location:
return cnt
반응형
'Python 코딩테스트' 카테고리의 다른 글
[백준] 5525 IOIOI 파이썬 (0) | 2022.09.21 |
---|---|
[백준] 2798 블랙잭 파이썬 (0) | 2022.09.19 |
[프로그래머스] 더 맵게 (0) | 2022.09.09 |
그리디: 백준 1783 병든 나이트 파이썬 (0) | 2022.09.07 |
[프로그래머스] 124 나라의 숫자 (0) | 2022.09.05 |