[Algorithm🧬] 기능개발

또상·2022년 1월 25일
0

Algorithm

목록 보기
33/133
post-thumbnail

문제 / 풀이.py

def solution(progresses, speeds):
    answer = []
    howManyDays = []
    day = 0
    maxD = 0
    count = 0
    
    # 일이 각각 며칠 걸리는지.
    for i in range(len(progresses)):
        howManyDays.append( round(((100 - progresses[i]) / speeds[i]) + 0.5) )
        # 11번 케이스
    
    
    print(howManyDays)
    maxD = howManyDays[0]
    count = 0
    for days in howManyDays:
        # 첫번째 일보다 소요 시간이 작으면 다 같이 배포 가능.
        if maxD >= days:
            count += 1
        # 소요시간이 크면 앞에 것과 같이 배포 못함. 얘랑 뒤에거를 같이 해야함.
        else:
            maxD = days
            answer.append(count)
            count = 1

    answer.append(count)
        
    
    return answer

11번 테스트 케이스가 문제였는데, [94, 96], [3, 3] 을 넣어보니 이상함을 알 수 있었다.

Math.ceil 을 해야하는걸 int == Math.floor 를 했기 때문이었다.. 순간 파이썬 math 모듈이 내장인가 아닌가 생각이 안나서 round(x+0.5) 로 손봤다.


참고가 된 다른사람의 풀이. ceil 대신 몫을 사용하여 -로 바꾸는 방식을 이용했다.

def solution(progresses, speeds):
    Q=[]
    for p, s in zip(progresses, speeds):
        if len(Q)==0 or Q[-1][0]<-((p-100)//s):
            Q.append([-((p-100)//s),1])
        else:
            Q[-1][1]+=1
    return [q[1] for q in Q]
profile
0년차 iOS 개발자입니다.

0개의 댓글