Algorithm/Stack & Queue

[Python] 프로그래머스 기능개발

코딩쪼앙 2024. 7. 17. 10:19

문제

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제 풀이

  • 남은 일수 담은 배열 생성
  • 편하게 연산하기 위해 큐에 일수 모두 넣기
  • 큐에서 pop한 후 그 값이 queue[0]보다 크거나 같다면 함께 처리 할 수 있는 기능
    • queue[0]값 pop
    • cnt += 2
  • queue[0]이 더 크다면 함께 처리할 수 없는 기능이므로 answer배열에 여태 계산한 기능 수를 넣고 바깥쪽 루프 연산 다시 시작

코드

from collections import deque
def solution(progresses, speeds):
    answer = []
    days = []
    for i in range(len(progresses)):
        day = 100 - progresses[i]
        if day % speeds[i] == 0:
            day = day // speeds[i]
            days.append(day)
        else:
            day = day // speeds[i] + 1
            days.append(day)
    # 큐 만들어서 빼면서 비교
    queue = deque()
    for i in range(len(days)):
        queue.append(days[i])
    
    while queue:
        cnt = 1
        value = queue.popleft()
        while queue and queue[0] <= value:
                cnt += 1
                queue.popleft()
        answer.append(cnt)
    

    return answer

from collections import deque
def solution(progresses, speeds):
    answer = []
    days = []
    for i in range(len(progresses)):
        day = 100 - progresses[i]
        if day % speeds[i] == 0:
            day = day // speeds[i]
            days.append(day)
        else:
            day = day // speeds[i] + 1
            days.append(day)
    # 큐 만들어서 빼면서 비교
    queue = deque()
    for i in range(len(days)):
        queue.append(days[i])
    
    while queue:
        cnt = 1
        value = queue.popleft()
        while queue:
            tmp = queue[0]
            if tmp <= value:
                cnt += 1
                queue.popleft()
            else:
                answer.append(cnt)
    if cnt:
        answer.append(cnt)
    return answer

거의 비슷한 로직이지만 조건문 분기를 너무 많이해서 시간초과 발생

분기처리를 간단화하고 while뮨 내부 while문이 계속해서 다음 기능을 확인하므로 다음 기능을 함께 개발하지 못할 경우 그냥 answer 배열에 값을 넣어주면 시간 초를 줄일 수 있다.