[프로그래머스/Python] 덧칠하기

2025. 4. 3. 13:55·알고리즘문제풀이

문제

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
'알고리즘문제풀이' 카테고리의 다른 글
  • [프로그래머스/Python] 체육복
  • [백준/Python] 11279번 최대 힙
  • [백준/Python] 2161번 카드1
  • [프로그래머스/Python] 유연근무제
jungyn
jungyn
jungyn 님의 블로그 입니다.
  • jungyn
    jungyn 님의 블로그
    jungyn
  • 전체
    오늘
    어제
    • 분류 전체보기 (36)
      • 알고리즘문제풀이 (31)
      • 제로인턴 (5)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    다이나믹프로그래밍
    11729
    2606
    2차원행렬
    프로그래머스
    스택 2
    28278
    카드1
    스택 수열
    2108
    스택
    후기
    1629
    SYS
    수들의 합 2
    solved.ac
    시간초과
    1847
    교점개수
    2563
    사전직무교육
    BFS
    백준
    counter
    너비우선탐색
    DP
    18110
    통계헉
    제로인턴
    2161
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
jungyn
[프로그래머스/Python] 덧칠하기
상단으로

티스토리툴바