코딩테스트/프로그래머스
[프로그래머스] - 덧칠하기(파이썬)
김쓰로그
2023. 3. 24. 23:42
https://school.programmers.co.kr/learn/courses/30/lessons/161989
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제이해
- 길이가 n미터인 벽이 있다. ⇒ 벽은 가로로 이뤄져있다.
- 길이가 가로로 m미터인 롤러가 있다.
- 칠해야할 벽인 section으로 주어진다. 이때 각 세션은 1x1미터 크기다.
- 안칠해도 될 곳, 이미 칠해져 있는 곳 모두 덧칠이 가능하다.
- 최소한의 작업 횟수를 구하자.
문제풀이
- 최대한 롤러가 칠할 수 있는 크기 안쪽으로 section이 많이 들어가야 한다. 그래야 최소 횟수로 작업이 가능하다.
- 롤러의 시작 인덱스와 끝 인덱스를 구하고 이거 보다 이 사이의 값들을 section에서 제거하면 된다.
- 한번 반복이 한번 칠한 것!
- 왼쪽에서 제거가 쉽게되도록 deque 자료구조를 활용했다.
from collections import deque
def solution(n, m, section):
answer = 0
section=deque(section)
while section:
start, end=section[0], section[0]+m
while section:
if start<=section[0]<=end-1:
section.popleft()
else:
break
answer+=1
return answer