[프로그래머스/Python] 프로세스

Jimin_Note·2025년 7월 27일
post-thumbnail

✨ 2025.07.27 코딩테스트 문제 풀이

📌 문제: 프로세스

🧠 문제 설명

  • 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수

💻 내가 작성한 코드

  • ❌ 1번째 (실패)
def solution(numbers):
    nfor i in range(len(priorities)):
    x = priorities.pop(priorities[i])

    return result

틀린이유🥲

  • pop으로 접근한 것 부터가 잘못

  • priorities[i]는 값, 그런데 pop()은 인덱스다.
    -> 예를 들어, priorities = [2, 1, 3]일 때 priorities[0] = 2, 그러면 priorities.pop(2) → 인덱스 2 위치의 값 제거

  • 리스트를 순회하면서 동시에 pop()하면 리스트 크기 변동 발생
    -> for i in range(len(priorities)) 여기선 처음에 길이만큼 고정 루프를 도는데
    그 안에서 pop()을 쓰면 리스트 길이가 줄어듦

  • pop() 은 큐처럼 쓰기엔 적절하지 않음 (deque가 더 적합)
    -> 우선순위를 비교하고 다시 뒤로 보내야하기 때문에 리스트로는 효율도 떨어지고,insert(0, x) 같은 비효율 연산이 필요해진다.

  • ⭕️ 답안
from collections import deque

def solution(priorities, location):
    answer = 0
    queue = deque([(i, p) for i,p in enumerate(priorities)])
    print(queue)
    
    while queue:
        current = queue.popleft()
        if any(current[1] < q[1] for q in queue):
            queue.append(current)
        else:
            answer += 1
            if current[0] == location:
                return answer
  • 인덱스와 값 묶어서 deque로 처리
  • popleft() 로 앞에서 꺼내고, 우선순위 비교해서 다시 넣는 방식이 가장 자연스러움!
profile
Hello. I'm jimin:)

0개의 댓글