본문 바로가기
알고리즘 문제/Codeground

[codeground] 8. 블럭 없애기

by 햄과함께 2019. 9. 2.
320x100

codeground - Practice - 연습문제 - 8. 블럭 없애기

문제 : https://www.codeground.org/practice/practiceProblemList


1. i번째 블럭 높이(h)
   a h b -> 높이가 h인 블럭 없어지는데 걸리는 시간 = h
2. i번째 블럭(h)의 양쪽 블럭이 없어지는데 걸리는 시간 중 최소값 + 1 
   a h b -> 높이가 h인 블럭 없어지는데 걸리는 시간 = (a, b 중 작은 값) + 1

i번째 블럭이 없어질 때까지 걸리는 시간은 1, 2번 중 최소값이다.

int d[n + 2];//d[i] = i번째 블럭이 없어질 때까지 걸리는 시간
즉, d[i] = min(d[i-1] + 1 , d[i+1] + 1, i번 블럭 높이) 

i 번째 블럭이 모두 없어지는데 걸리는 시간은 양쪽(i-1, i+1)에 있는 블럭이 없어지는 시간과 관계있다.
따라서 왼쪽과 자신(i-1, i), 자신과 오른쪽(i, i+1)을 비교하는 두 번의 탐색으로 d배열을 채운다.
그리고 배열의 양 끝(d[0], d[n+1])에는 0을 저장해서 가장 가장자리에 있는 블럭들은 외부 블록으로 처리, 1(0+1) 만에 없어지게 한다.

시간 복잡도는 O(N)


소스코드 : https://github.com/fpdjsns/Algorithm/blob/master/codeground/8.%20%EB%B8%94%EB%9F%AD%20%EC%97%86%EC%95%A0%EA%B8%B0.cpp

320x100

'알고리즘 문제 > Codeground' 카테고리의 다른 글

[codeground] 71. 정수 정렬하기  (0) 2019.09.14
[codeground] 31. 프리랜서  (0) 2019.09.13
[codeground] 52. 최대 직사각형  (0) 2019.09.12
[codeground] 36. 재활용  (0) 2019.06.12
[Codeground][74] 버스타기  (0) 2018.11.16

댓글