문제 확인

 

프로그래머스

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

programmers.co.kr

나의 풀이

섹션이 이미 순서대로 정렬돼 있다.

그래서 앞에서부터(뒤에서부터) 차례로 칠하기만 해도 최소 덧칠 횟수가 만족된다.

# N 개의 구역 (1 ~ N 라벨)
# M 미터 -> 구역 초과 X
# 반복해도 되지만, 최소화해야 함
# 끝에서 부터 확인하면 될 듯 -> 윈도우가 범위 안 넘어가면 색칠
# 순서 유지돼야 함 -> 윈도우 내 최소 값 보다 마지막 성분이 큰 경우 pop()
def solution(n, m, section):
    cnt = 0
    # 모든 영역을 다 칠할 때 까지 반복
    while section:
        # 윈도우 설정
        end = section[-1] - 1
        start = end - m + 1
        # 범위 초과 경우
        if start < 0:
            start, end = 0, m - 1
        cnt += 1
        while start <= (section[-1] - 1):
            section.pop()
            # 다 제거한 경우
            if not section:
                break
    return cnt