언어

덧칠하기

땅호720 2023. 12. 20. 13:18
def solution(n, m, section):
    # section: 다시 칠해야 하는 영역
    # m: 칠해지는 연속 구간 (롤러 길이) -> 한 번의 페인트칠
    # ex) 6-3+1 = 4 (연속 구간) => 2 (시작 구역) + 4(연속 구간) -1 = 끝나는 구역
    
    # 어차피 n // m 번 해야함
    # section 길이가 m보다 길면 필수
    # section의 최대 최소 구역 비교하여 m을 커버할 수 있는지..?
    # max(section) > min(section) + m - 1
    
    answer = 0
    if m==1:
        answer = len(section)
    else:
        while section:
            limit = min(section) + m - 1
            idx = max([idx for idx, s in enumerate(section) if s <= limit])
            section = section[idx+1:]
            answer += 1
    
    return answer

 

한 번에 칠할 수 있는 구역 m이 1이면 section만큼 해야하므로, 따로 연산 없이 section의 길이를 반환하는 케이스를 분리해주는 게 좋다