math 모듈과 기능 개발 : 스택, 큐

solee·2022년 6월 19일
0

Python

목록 보기
13/16

이래저래 고민했는데, 일단 (100-p)/s를 계산해 각 기능을 개발하는 데에 드는 기간을 계산하고, for문을 돌려 첫 번째 기능 개발에 필요한 기간보다 더 짧게 걸리는 경우 count에 1씩 더하고 더 길게 걸리는 경우는 그때까지의 count를 answer에 추가하는 방식으로 방향을 잡았다.

처음부터 count를 1로 할당하고 재할당도 1로 하는 건 기준을 잡기 위해 저장하는 기능을 포함하기 위해서다.

중간에 고민했던 부분은 맨 처음 기능 개발에 필요한 시간을 기준=배포일으로 잡는 부분이었는데, 0으로 잡고 시작하면 for문을 돌릴 때 크기를 비교한 후 append를 하려는 내 로직에 맞지 않았다. 그래서 기준과 for문에 필요한 분량을 [0]과 [1:]로 슬라이싱해 해결했다.
통과한 후 이 부분을 해결해보려고 했는데 지금 당장은 떠오르는 게 없다...

for문을 2번 돌리지 않고 해결하고 싶었는데, 이것도 뭔가 맘대로 되지 않아서 컴프리헨션과 계산을 따로 나누었다.

헷갈렸던 부분은 실패한 11번 테스트 케이스였다. 알고보니 처음 코드에 (100-p)//s로 진행해서 정수를 나누면서 내림이 생겼던 거였다. math를 import해서 ceil()을 수행해 해결했다.


import math

def solution(progresses, speeds):
    answer = []
    requiredDates  = [math.ceil((100-p)/s) for p, s in zip(progresses, speeds)]
    distributeDate = requiredDates[0]
    count = 1
    
    for r in requiredDates[1:]:
        if r <= distributeDate:
            count += 1
        else:
            answer.append(count)
            distributeDate = r
            count = 1
    answer.append(count)
    return answer

각 기능을 개발하는 데에 걸리는 날짜를 먼저 계산한 건 괜찮은 생각이었던 것 같다.
for문을 1번만 쓸 수 있도록 합치고 있는데, 테스트 케이스 4개를 신명나게 틀리고 있고, 그 다음에는 프로그래머스 사이트가 안 열려서 일단 포스트는 여기서 마무리.

profile
DA DA DA

0개의 댓글