본문 바로가기
Algorithm/Accepted

[프로그래머스]기능개발(다시풀기)

by Baley 2023. 11. 15.

** 개인적 공부를 위한 포스팅일 뿐이므로 신뢰성은 보장할 수 없습니다.

이전에 풀었던 문제이나 다시 보니 또 초면이라^^; 바로 풀이하지 못했고, 이전에 제출한 답안이 상당히 비효율적인 면이 있어서 다시 풀었다.

 

이전 풀이

from collections import deque

def solution(progresses, speeds):
    dq = deque()
    for i in range(len(progresses)):
        dq.append([progresses[i], speeds[i]])

    # print(dq)


    def speed_up():
        for idx, val in enumerate(dq):
            p, s = val
            dq[idx][0], dq[idx][1] = p + s, s

        # print(dq)

    cnt = 0
    answer = list()
    while dq:
        # print('>>>>')
        if dq[0][0] >= 100:
            dq.popleft()
            cnt += 1
            # print(dq)
            # print(cnt)
            # print(answer)
        else:
            if cnt > 0:
                answer.append(cnt)
                cnt = 0
            speed_up()
    else:
        answer.append(cnt)

    return answer

 

개선점

  • deque라는 자료형을 굳이 사용할 필요가 없다. 큐의 특성을 활용하기 위해 deque 자료형을 사용하려 한 것 같으나 해당 문제는 큐의 속성을 사용하지 않고 리스트만으로도 충분히 풀이 가능하다. 
  • 굳이 deque라는 자료형을 사용해 놓고 enumerate를 사용하여 리스트로 변환하여 순회한다. 
  • enumerate도 굳이 사용할 필요가 없다. enumerate를 사용한 것은개발작업들이 100%를 넘어도 앞에 위치한 개발 작업이 100%가 넘지 않는 한 배포되지 않는다는 것을 확실히 하기 위해 당시 생각해 낸 방법인 것 같다.

 

재풀이

def solution(progresses, speeds):
    day = 0 // 작업일
    cnt = 0 // 배포 가능한 기능 수
    answer = []
    while progresses:
        temp = progresses[0] + speeds[0] * day
        if temp >= 100:
            progresses.pop(0)
            speeds.pop(0)
            cnt += 1
        else:
            day += 1
            if cnt > 0:
                answer.append(cnt)
                cnt = 0
    answer.append(cnt)
    return answer

위의 풀이에서는 speed_up이란 함수를 사용해 몇 번이나 반복해야 각 기능이 100% 이상이 될 것인가를 확인하고 있다. 이번 풀이에서는 day라는 변수를 두어 며칠이 지나야 배포 가능한 상태가 되는지 계산한다.

 

https://school.programmers.co.kr/learn/courses/30/lessons/42586

 

프로그래머스

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

programmers.co.kr

 

 

댓글