프로그래머스 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) 변수를 통해 구현한 풀이입니다. '나의 풀이'와 비교했을 때 약간 더 간결한 형식이였습니다.🦙🦙🦙
감사합니다.