프로그래머스 연습문제
- Lv 1. 덧칠하기 (Python)
https://school.programmers.co.kr/learn/courses/30/lessons/161989
def solution(n, m, section):
answer = 0
wall = [1 for _ in range(n)] # n 구역의 벽 배열 (기본으로는 다 1)
for s in section: # 색을 다시 칠해야 하는 부분은 0 으로 지정
wall[s - 1] = 0
for i in range(len(wall)):
if (wall[i] == 0): # 벽을 둘러면서 0인 부분을 만나면 -> 다시 칠해야함
for j in range(i, i + m): # 해당 섹션부터 롤러 크기가 닿는 곳까지 하나씩 칠하기
if(j >= len(wall)): # 만약 롤러가 벽의 크기를 벗어나면 -> 그만 칠하기
break
wall[j] = 1
answer += 1 # 페인트칠 했으니 횟수에 +1
return answer
if __name__ == '__main__':
print(solution(8, 4, [2, 3, 6]))
print(solution(5, 4, [1, 3]))
print(solution(4, 1, [1, 2, 3, 4]))
print(solution(4, 2, [3, 4])) # 1
print(solution(5, 2, [1, 2, 5])) # 2
wall
배열 설정 → section
에 나온 다시 칠해야 하는 부분은 0으로 설정, 그 외는 1로 설정section
= [2, 3, 6] , wall
= [1, 0, 0, 1, 1, 0, 1, 1]i + m
부분에서 wall
배열의 길이보다 커지게 되어 런타임 에러가 발생하였다. wall
배열보다 크기가 큰 부분이라면 → 더 이상 칠하지 못하니 break
해주어야 한다.wall[j] = 1
로 페인트칠을 해준다. → answer + 1wall
배열을 다 훑고 나면 → 정답 리턴다른 사람 정답 코드, for문을 하나만 돌기 때문에 효율이 더 좋을 것 같다.
def solution(n, m, section):
answer = 1
prev = section[0]
for sec in section:
if sec - prev >= m:
prev = sec
answer += 1
return answer
비슷한 코드인데 이 코드가 더 이해가 잘되는 것 같다.
출처 : https://beomcoder.tistory.com/52
def solution(n, m, section):
paint, answer = section[0]-1, 0
for v in section:
if paint < v:
paint = v+m-1
answer += 1
return answer
paint
= 페인트칠 하고 나서의 인덱스
훌륭한 글 감사드립니다.