Coding Test/Python

[Programmers][코딩테스트연습/스택큐] 기능개발

수수킴 2023. 7. 20.

import math

def solution(progresses, speeds):
    Q=[]
    for p, s in zip(progresses, speeds):
        if len(Q)==0 or Q[-1][0]<(math.ceil((100-p)/s)):
            Q.append([math.ceil((100-p)/s),1])
        else:
            Q[-1][1]+=1
    print(Q)
    return [q[1] for q in Q]

배포되기 전 남은 일수는 math.ceil((100-p)/s) 로 계산한다. (ceil: 올림)

 

이해를 위해 아래 테스트2 의 예시를 보자면

배포되기 전 남은 일수는 (100-95)/1=5, (100-90)/1=10, (100-99)/1=1, (100-99)/1=1, (100-80)/1=20, (100-99)/1=1 일이 남았다.

 

직전에 있는 math.ceil((100-p)/s) 보다 현재의 math.ceil((100-p)/s)이 더 크면 1로 초기화, 

직전에 있는 math.ceil((100-p)/s) 보다 현재의 math.ceil((100-p)/s)이 더 작으면 1을 누적하는 식으로 작동한다면 답을 구할 수 있다. 

다른 사람 풀이에 math.ceil((100-p)/s) 대신 -((p-100)//s)로 푼 사람이 있었는데 (p-100) => 음수, (p-100) // s => 내림한 음수(음수에서 내림은 절대값은 커짐), -((p-100)//s) => 올림한 양수 방식으로 올림을 하였다. 신박하군...

 

 

프로그래머스

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

programmers.co.kr

 

댓글