[Lv2] 기능개발

이말감·2022년 1월 31일
0

Programmers

목록 보기
7/32

프로그래머스 Lv2 기능개발

문제

링크

새로운 풀이

  • 2022.07.25.ver
def solution(progresses, speeds):
    answer = []
    while progresses :
        if progresses[0] >= 100 :
            progresses.pop(0)
            speeds.pop(0)
            answer.append(1)
            while progresses and progresses[0] >= 100 :
                progresses.pop(0)
                speeds.pop(0)
                answer[-1] += 1
            continue
        for i in range(len(progresses)) :
            progresses[i] += speeds[i]
    return answer
        

그냥 풀었을 때

import math
def solution(progresses, speeds):
    save = []
    # 며칠 걸리는 지 구하기
    for i in range(len(progresses)) :
        p = (100-progresses[i]) / speeds[i]
        save.append(math.ceil(p))
    check = 1
    num = save[0]
    answer = []
    # 첫 날을 기준으로 다음 개발일이 큰지 안큰지 비교하면서 넣기
    for s in range(1,len(save) + 1) :
        if s == len(save) :
            answer.append(check)
            break
        if num > save[s] :
            check += 1
        elif num == save[s] :
            check += 1
        else :
            answer.append(check)
            num = save[s]
            check = 1
    return answer

큐 이용해서 풀었을 때

import math
from collections import deque
def solution(progresses, speeds):
    save = []
    for i in range(len(progresses)) :
        p = (100-progresses[i]) / speeds[i]
        save.append(math.ceil(p))
    queue = deque()
    answer = []
    # 근데 얘도 큐에 넣고 뺐다만 있지 위와 동일한 과정
    for s in save :
        if len(queue) == 0 or queue[0] >= s:
            queue.append(s)
        else :
            answer.append(len(queue))
            queue = deque()
            queue.append(s)
    if len(queue) > 0 :
        answer.append(len(queue))
    return answer
        

도대체 2월에 푼 풀이를 이해할 수가 없다 !!
새로 풀고나서 이전 풀이랑 비교하려고 봤더니...정말정말로 이상하게 풀었다..
다시 풀어보길 정말 잘한 것 같다!!!

풀이는 아래와 같이 저어어엉말 간단하다.
며칠 째에 반영이 되었는지 물어보는 것이 아니라, 한 번에 반영될 때 몇 개씩인지 알아내라 ~ 라는 말이기 때문에 이전 풀이와 같이 안풀어도 된다.

progresses가 빌 때까지 계속 반복한다.
이때 가장 앞에 있는 원소가 100 이상이 되지 않으면 pop할 수 없으므로 계속 speeds 씩 각각 더해준다.
그러다가 맨 앞 원소가 100 이상이면 progresses, speeds 둘 다 pop(0)을 하고, 혹시나 다음 원소들 중 100 이상인 수가 있는지 확인한다.(반복문)

profile
전 척척학사지만 말하는 감자에요

0개의 댓글