첫번째 코드
딱 보고 생각이 든 것은 슬라이딩 윈도우 같이 생겼네!
coloring이라는 변수에 section의 맨 앞에 존재하는 원소부터 m개까지는 추가해서 section에서 제거하자
하여 section에 원소가 더 이상 존재하지 않으면 멈춘다! 라는 아이디어로 시작해서 중복과 제거, 추가가 쉬운 집합이 생각이 났다!
def solution(n, m, section):
answer = 0
section = set(section)
while section:
coloring = set(range(min(section), min(section) + m))
section = section - coloring
answer += 1
return answer
해당 코드는 정답을 맞추는 것 같으나 몇 부분에서 시간 초과가 나타난다...
n, m이 엄청 커질수도 있어서 그런강...?
두번째 코드
그러면 place라는 n만큼 있는 리스트를 생성하자!
해당 리스트는 색이 칠해져 있는 경우는 1로, 칠해지지 않은 경우는 0으로 만든 후
0인 경우에 m만큼까지 1로 바꾼다
section안의 원소만큼 반복하면서 1이면 그냥 두고 0인 경우에 다시 m만큼 1로 바꾼다
이렇게 answer에 개수를 더하는 방법으로 진행한다!
def solution(n, m, section):
answer = 0
place = [1] * n
for i in section:
place[i-1] = 0
for i in section:
if place[i-1] == 0:
place[i-1 : i+m-1] = [1] * m
answer += 1
return answer
통과!
정작 코드를 작성할 때는 크게 고민하지 않은 것 같은데 코드를 작성하기 전 아이디어 생각에서 시간이 좀 걸린 느낌이다!
링크
programmers/프로그래머스/1/161989. 덧칠하기 at main · ornni/programmers
repository for recording Programmers Algorithm problem solving - ornni/programmers
github.com
'코딩 테스트 > 프로그래머스' 카테고리의 다른 글
가운데 글자 가져오기 (2) | 2024.04.12 |
---|---|
K번째 수 (0) | 2024.04.11 |
x만큼 간격이 있는 n개의 숫자 (0) | 2024.04.10 |
로또의 최고 순위와 최저 순위 (0) | 2024.04.09 |
없는 숫자 더하기 (0) | 2024.04.09 |