🖇️ 링크
https://school.programmers.co.kr/learn/courses/30/lessons/42587
🗒️ 파이썬 코드 풀이
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
시간 복잡도 O( N² )
1. deque 라이브러리 없이 풀이한 코드이다.
- deque를 안써도 되기는 하지만 pop(0)의 시간복잡도는 O(N)
- pop()의 시각복잡도는 O(1)
- 지금은 pop(0)을 써도 큰 상관은 없어서 쓰지만, 문제 생길 경우 deqeue를 쓰는게 좋음
2. 우선 enumerate 함수로 queue를 인덱스와 함께 만들어 준다.
3. any를 통해 pop 된 값이 가장 큰 값인지 비교한다.
- 가장 큰 값이 아닌 경우 append를 해줌
- 가장 큰 값인 경우 answer += 1을 해줌
4. 가장 큰 값인 경우 if 조건문을 추가해서 정답을 추출한다.
📌 문제 코멘트
내가 작성한 코드
from collections import deque
def solution(priorities, location):
visit = deque([i for i in range(len(priorities))])
priorities = deque(priorities)
rs, answer = visit[location], 0
while priorities :
if priorities[0] == max(priorities):
if visit[0] == rs:
answer += 1
return answer
priorities.popleft()
visit.popleft()
answer += 1
else:
p_tmp = priorities.popleft()
v_tmp = visit.popleft()
priorities.append(p_tmp)
visit.append(v_tmp)
- 바로 위의 코드는 내가 작성한 코드이다.
- 이렇게 해도 상관은 없지만, visit라는 리스트를 만들어 가독성을 떨어트린다. 그냥 인덱스로 하면 좋을 것 같다.
- visit를 만들어 중복되는 코드가 많고, popleft는 한번만 써도 된다.
이 문제를 포스팅 하는 이유는 다음과 같다
- any의 활용
- pop을 그동안 마지막 부분만 되는 줄 알았던 점 ... (원하는 부분 인덱스로 pop 가능)
📚 문제
'♟️ 알고리즘 > 알고리즘_프로그래머스' 카테고리의 다른 글
[MySQL][프로그래머스] 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기 / (Lv4) (0) | 2025.02.21 |
---|---|
[Python][프로그래머스] 가장 큰 수 / 정렬 (Lv2) (0) | 2025.02.21 |
[Python][프로그래머스] 전화번호 목록 / 해시,정렬 (Lv2) (0) | 2025.02.21 |
[Python][프로그래머스] 주식 가격 / 스택 (Lv2) (0) | 2025.02.15 |
[Python][프로그래머스] 최대공약수와 최소공배수 (0) | 2024.05.16 |