📋 문제
✳️ 코드 작성
def solution(n, m, section):
answer = 0
painted = 0
for area in section:
if area > painted:
painted = area + m - 1
answer += 1
return answer
💟 함수 정의
def solution(n, m, section):
- 변수 n은 구역의 개수, m은 페인트할 수 있는 길이, section은 칠해야 할 구역들의 리스트
💟 변수 초기화
answer = 0
painted = 0
- answer : 최소한의 칠 횟수를 저장하는 변수
- painted : 마지막으로 칠한 구역의 끝 지점을 저장
💟 페인트 칠 해야하는 구역 확인 및 칠하기
for area in section:
if area > painted:
painted = area + m - 1
answer += 1
- for문
- section 리스트의 각 구역에 대해 순차적으로 확인. 각 구역이 area로 나타남
- 칠해야하는 구역 확인
- 현재 구역 area가 이미 칠한 범위 painted를 넘어서는지 확인
- 만약 area가 painted보다 크다면, 해당 구역은 아직 칠하지 않은 구역이므로 새로운 페인트 작업이 필요
- 새로운 구역 칠하기
- painted 값을 업데이트하여 이번에 페인트칠할 구역의 끝 지점을 기록
- 끝 지점은 area + m - 1로, 이는 현재 구역의 시작 지점부터 m 길이만큼을 칠하는 것이기 때문
- 칠했으므로 answer를 1 증가
- 반복
- 루프가 끝날 때까지 위 과정을 반복하여 모든 구역을 덮을 수 있을 때까지 페인트칠 진행
💠 예시
- n = 8 (전체 구역의 개수)
- m = 4 (한 번에 페인트칠할 수 있는 길이)
- section = [2, 3, 6] (칠해야 할 구역의 시작 지점들)
🔵 동작 과정
- 첫 번째 구역 (area = 2):
- painted = 0이므로 2 > 0 → 아직 칠하지 않은 구역이므로 칠해야 함
- painted = 2 + 4 - 1 = 5 (2에서 시작해 5까지 칠함)
- answer = 1 (칠 횟수 1 증가)
- 두 번째 구역 (area = 3):
- painted = 5이므로 3 <= 5 → 이미 구역 3은 칠해진 상태이므로 추가로 칠할 필요 없음
- 결과: 칠하지 않음, answer는 그대로 1.
- 세 번째 구역 (area = 6):
- painted = 5이므로 6 > 5 → 아직 칠하지 않은 구역이므로 칠해야 함
- painted = 6 + 4 - 1 = 9 (6에서 시작해 9까지 칠함)
- answer = 2 (칠 횟수 1 증가)
🔵 최종 결과
- 최소 칠 횟수는 2
'📒 Today I Learn > 🐍 Python' 카테고리의 다른 글
[Python] 소수 만들기 (0) | 2024.10.02 |
---|---|
[Python] 모의고사 (0) | 2024.10.02 |
[Python] 콜라 문제 (0) | 2024.09.27 |
[Python] 푸드 파이트 대회 (0) | 2024.09.26 |
[Python] 가장 가까운 같은 글자 (0) | 2024.09.25 |