프로그래머스 Lv 2. | 기능개발

krystal·2022년 6월 30일
0

프로그래머스 Lv 2. | 기능개발

문제


어떻게 해야할까


현 진도현황와 속도로 며칠이 남았는지 계산을 하고, 순서에 따라 배포가 되기때문에 순서를 잘 보면서 배치해야한다. 얘도 결국 for문을 통해서 계속 돌려야하는 걸까?


코드

일단 (남은 진도현황 / 속도) 값을 올림으로 한 값들로 이루어진 리스트를 만들고, 리스트를 순서대로 돌면서 뒤의 원소가 더 작을때까지 카운트해주고, 뒤의 원소가 더 크면 카운트를 멈추고 split이나 다른 함수를 통해서 리스트를 지워나간다.

.....🤯 일단 O(n^2)은 안되나보다. 그리고 내가 놓친 테케가 있는건가?

사람들이 질문한 것들을 보니까 진도현황과 속도가 모두 같은 경우도 고려해야하는 것같다. 고려하니까 몇 개의 테케는 맞추긴 했다.


코드

split하기전에 내가 따로 복제를 했어야했다. 진짜 바본가 ㅠㅠ 이것때문에 계속 몇 분을 더 소비했다. 비교할 대상도 조건에 따라 초기화 했어야했다.

import math
def solution(progresses, speeds):
    answer = []
    span = [math.ceil((100-progresses[i])/speeds[i]) for i in range(len(progresses))]
    
    num,start, com,idx, cnt=span[0],0, 1, 1, 1
    span_list = span[:]
    while len(span_list)>1:
        if num < span_list[com]:
            span_list = span[idx:]
            num = span_list[0]
            answer.append(cnt)
            cnt = 1
        elif num == span_list[com]:
            span_list = span[idx:]
            cnt += 1
        else:
            span_list = span[idx:]
            cnt+=1
        idx+=1
    answer.append(cnt)
    return answer

profile
https://source-coding.tistory.com/

0개의 댓글