2024. 3. 29. 20:50ㆍ내일배움캠프
3월 29일
오늘은 덧칠하기 문제를 풀어보았다
덧칠하기
문제 설명이 정말 길다
너무 길어서 핵심만 봐보자 우리에겐 3가지가 주어진다
벽의 길이 n 그리고 롤러의 길이 m 덧칠해야할 벽의 section
짜란 솔루션의 초기 버전이다 section에는 우리가 덧칠해야할 벽의 구역이 들어있다
그렇기에 우린?
section의 길이만큼 반복을 해줄것이다 그럼 빈 구역에 덧칠을 할 수 있겠지?
그 다음으로 생각해야할껀 롤러로 페인트를 한번 칠했을때 칠해진 페인트가 벽의 몇번째까지
칠해졌는지 알아야한다 그렇기에 paint 변수를 하나 만들어주자
초기에는 덧칠한적이 없기에 0부터 시작한다
그리고 반복문을 돌면서 덧칠을 하는데 필요한 조건을 만들어보자
section[i]는 내가 덧칠해야할 벽의 번호가 들어가있으껀데 그게 내가 덧칠한 paint의 위치보다 크면?
그곳에는 아직 페인트가 덧칠해지지 않았으니깐? 덧칠을 해줘야한다 그렇기에 조건에 부합하면
answer을 +1 올려주고? paint의 위치를 section[i] + m - 1 만큼 옮겨주자
왜 -1을 해주는지는 다음 그림을 통해서 알아보도록 하자
첫번째 예제이다 초기상태의 paint의 위치는 0 section[i]의 위치는 2일 것이다
우리는 4칸짜리 롤러를 가지고있을것이고 4칸짜리 롤러로 페인트를 칠하면 이런식으로 칠해지게 되어있다
잘 생각해보자 우리는 2번째 칸부터 시작해서 4칸을 칠하기 때문에 페인트가 마지막으로 덧칠한 위치는 5
section[i] + m 을 하게되면 2번째 칸인 section[i]를 포함한 계산식이 아니기 때문에 우리는 -1을 해줌으로써
그림과 같은 결과를 얻을 수 있게 되는것이다
-1을 빼주지 않고 그냥 section[i] + m을 하게되면 위 그림처럼 칠해진다고 생각하자
정답!
오늘은 덧칠하기 문제를 풀어보았다.
사실 나도 처음엔 paint의 위치를 section[i] + m 으로만 계산해서 문제를 틀렸는데
그림판으로 그려보면서 왜 틀렸는지 보니깐 한번에 이해하고 문제를 풀 수 있었다
참 재밌었다!
3월 29일 TIL은 여기서 마치도록 하겠다
'내일배움캠프' 카테고리의 다른 글
240402-TIL (0) | 2024.04.02 |
---|---|
240401-TIL (0) | 2024.04.01 |
240328-TIL (0) | 2024.03.28 |
240326-TIL (0) | 2024.03.26 |
240325-TIL (1) | 2024.03.25 |