[programmers/py] 덧칠하기

승민·2023년 4월 5일

알고리즘

목록 보기
9/171

덧칠하기

https://school.programmers.co.kr/learn/courses/30/lessons/161989?language=python3

문제설명

  • 롤러가 벽에서 벗어나면 안 됩니다.
  • 구역의 일부분만 포함되도록 칠하면 안 됩니다.

즉, 룰러는 한 번 칠하면 m만큼 칠해야 합니다. 한 구역에 페인트를 여러 번 칠해도 되고 다시 칠해야 할 구역이 아닌 곳에 페인트를 칠해도 되지만 다시 칠하기로 정한 구역은 적어도 한 번 페인트칠을 해야 합니다.

정수 n, m과 다시 페인트를 칠하기로 정한 구역들의 번호가 담긴 정수 배열 section이 매개변수로 주어질 때 롤러로 페인트칠해야 하는 최소 횟수를 return 하는 solution 함수를 작성해 주세요.

제한사항

  • 1 ≤ m ≤ n ≤ 100,000
  • 1 ≤ section의 길이 ≤ n
  • 1 ≤ section의 원소 ≤ n
  • section의 원소는 페인트를 다시 칠해야 하는 구역의 번호입니다.
  • section에서 같은 원소가 두 번 이상 나타나지 않습니다.
  • section의 원소는 오름차순으로 정렬되어 있습니다.

풀이 설명

  1. m이 1이면 sections의 길이가 최소 횟수
  2. 다시 페인트를 한 위치를 나타내는 paint를 선언
  3. 만약 sections 값이 이미 칠했다면 === s<=paint 넘어간다.
  4. 다시 칠해야 하는 구역이 2로 m=4일 때 2,3,4,5 총 4구역이 칠해짐으로 s+m-1을 통해 paint 값을 변경해준다.
def solution(n, m, section):
    # m이 1일 경우
    if m == 1:
        return len(section)
    
    # 앞에서 부터 칠하고 넘어가고
    cnt = 0
    paint = 0
    for s in section:
        if s <= paint : # 2를 칠해야 하는데 4까지 칠해졌으면 continue
            continue
        else :
            cnt += 1
            paint = s + m - 1
        
    return cnt

0개의 댓글