티스토리 뷰

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

 

프로그래머스

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

programmers.co.kr

풀긴 풀었는데 정말 비효율적으로 푼 것 같다. 일단 제일 먼저 한 생각이 progresses, speeds 배열을 가지고 기간이 얼마나 걸리는지를 담은 배열(temp)를 만들었다. 배열의 값을 넣을 때는 ceil 함수를 사용하여 올림으로 계산하였다.

그러고 temp의 모든 값이 0이 될 때까지 반복문을 돈다. temp[idx] 값이 0이라면(개발이 완료되었다면) 다음 temp를 검사한다. 만약 0이 아니라면(기능 개발이 덜 되었다면) 시간을 보내 기능 개발 구현을 완료시킨 후 배포를 진행한다. 시간이 흐른 뒤의 뒷 일의 개발 상황을 보고 배포가 가능하면 배포를 진행하고(cnt 값 증가), 그렇지 않으면 중단한다. 이때 idx 값을 하나 증가시켜 다음 기능을 확인하고 answer 배열에 담는다. 

import math
def solution(progresses, speeds):
    answer = []
    temp = []
    for i in range(len(progresses)):
        temp.append(100-progresses[i])
        temp[i] = math.ceil(temp[i]/speeds[i])
    
    idx = 0
    check = -1
    while True:
        cnt = 0
        if sum(temp) == 0:
            break
        if temp[idx] != 0:
            check = temp[idx]
            for i in range(idx, len(temp)):
                if temp[i] - check > 0: # 기능 완성이 덜 됨
                    break
                else:
                    cnt += 1
                    temp[i] -= check
                    if temp[i] < 0: temp[i] = 0
            idx += 1
            answer.append(cnt)
        else:
            idx += 1
    return answer

나는 이렇게.. 스택을 생각하지 못하고 풀었는데 .. 문제를 풀고 난 후 다른 사람들의 풀이를 보니 덱을 사용하여 popleft로 하나씩 빼가며 순차적으로 접근하였다. 

from collections import deque
import math
def solution(progresses, speeds):
    answer = []
    temp = deque()
    for i in range(len(progresses)):
        temp.append(math.ceil((100-progresses[i])/speeds[i]))
    
    value = temp.popleft()
    cnt = 1
    while temp:
        if value - temp[0] >= 0:
            cnt += 1
            temp.popleft()
        else:
            value = temp.popleft()
            answer.append(cnt)
            cnt = 1
    answer.append(cnt)
    return answer

그러니 코드가 훨씬 더 깔끔해진 것 같다. 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함