프로그래머스_ 덧칠하기

임정민·2023년 11월 16일
0

알고리즘 문제풀이

목록 보기
126/173
post-thumbnail

프로그래머스 Lv1 문제입니다. 실전에 대비하기 위해 30분 시간제한을 두고 풀었습니다.

문제

https://school.programmers.co.kr/learn/courses/30/lessons/161989

[나의 풀이]

⌛ 25분 소요



def solution(n, m, section):
    answer = 0
    
    end = section[0]+m-1
    answer += 1
    section = section[1:]
    
    for sec in section:

        if sec>end:
            answer += 1
            end = sec+m-1
        
    return answer

주어진 영역에 최소의 횟수로 페인트칠하는 문제입니다. 한번에 m길이만큼 칠할 수 있는 롤러를 통해 띄엄띄엄 비어있는 영역을 최소 횟수로 전부 칠하는 것이 요구사항이였습니다.🐥🐥🐥

최초에는 queue 구조로 이미 칠해진 영역들 1칸씩 모두 돌며 구현할 생각이였지만 시간이 오래걸릴 위험이 있어 다른 접근 방법으로 시도하였고 간단히 리스트의 슬라이싱과 수식을 통해 해결할 수 있었습니다.

[다른 사람의 풀이1]


def solution(n, m, section):
    answer = 1
    prev = section[0]
    for sec in section:
        if sec - prev >= m:
            prev = sec
            answer += 1

    return answer

문제에서 최소 1번은 롤러로 칠해야하기 때문에 '나의 풀이'처럼 answer = 1로 초기화 시켜준 모습입니다.

이후 최소 횟수 구하는 수식은 동일합니다.

[다른 사람의 풀이2]


def solution(n, m, section):
    n_painted, answer = 0, 0
    for s in section:
        if s > n_painted:
            n_painted = s + m - 1
            answer += 1
    return answer

현재까지 칠해진 경계(n_painted) 변수를 통해 구현한 풀이입니다. '나의 풀이'와 비교했을 때 약간 더 간결한 형식이였습니다.🦙🦙🦙

감사합니다.

profile
https://github.com/min731

0개의 댓글