문제
https://school.programmers.co.kr/learn/courses/30/lessons/161989
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 풀이(정답)
def solution(n, m, section):
answer = 0
paint = [1] * n
for i in section:
paint[i-1] = 0
cur = 0 # 현재 위치
while cur < n:
if paint[cur] == 0:
answer += 1
for j in range(cur, min(cur+m, n)):
paint[j] = 1
cur += m
else:
cur += 1
return answer
초기화 과정
paint 리스트를 만들어 모든 구역을 1(페인트가 칠해진 상태)로 초기화한다.
section에 있는 구역은 0으로 설정하여, 페인트를 다시 칠해야 하는 구역을 표시한다.
페인트 칠하는 과정
cur(현재 위치)을 0으로 설정하고 반복문을 실행한다.
cur 위치가 0이라면 answer(페인트 칠한 횟수)를 1 증가시킨다.
cur부터 cur + m - 1까지 페인트를 칠한다.
☆ 전체 길이 n을 넘어갈 수 있으므로 min(cur + m, n)을 사용하여 오류가 없도록 처리한다.
cur을 m만큼 이동하여 다음 구간을 확인한다.
cur 위치가 1이라면 cur을 1 증가시켜 다음 위치로 이동한다.
종료 조건
cur이 n 이상이 되면 반복문을 종료하고 answer를 반환한다.
'알고리즘문제풀이' 카테고리의 다른 글
| [프로그래머스/Python] 체육복 (0) | 2025.04.09 |
|---|---|
| [백준/Python] 11279번 최대 힙 (0) | 2025.03.31 |
| [백준/Python] 2161번 카드1 (2) | 2025.03.28 |
| [프로그래머스/Python] 유연근무제 (0) | 2025.03.21 |
| [백준/Python] 1406번 에디터 (0) | 2025.03.18 |
