2018. 1. 3. 23:09, 알고리즘/BOJ
https://www.acmicpc.net/problem/1937
1. 대나무의 위치를 길이 순으로 sorting합니다. O(N^2 lgN)
2. 길이가 긴 곳 부터 시작해서 자신의 상하좌우를 살펴보며 height[x][y] < height[x_new][y_new]에 대해 D[x][y] = max(D[x][y], D[x_new][y_new]+1)로 갱신합니다. 이렇게 되면 BFS 혹은 DFS로 순회를 계속하지 않고 자신의 사방만 살펴보면 되기 때문에 각 나무에 대해 상수시간이 소모됩니다. O(N^2)
D 테이블에서 최댓값을 반환합니다.
DFS / BFS를 써야할 것 같이 생겼지만 길이가 긴 곳부터 탐색하면 traversal 없이 답을 얻을 수 있습니다.
https://github.com/encrypted-def/BOJ/blob/master/1937.cpp
'알고리즘 > BOJ' 카테고리의 다른 글
[BOJ] 2042번: 구간 합 구하기 (0) | 2018.01.03 |
---|---|
[BOJ] 11728번: 배열 합치기 (0) | 2018.01.03 |
[BOJ] 1931번: 회의실배정 (3) | 2018.01.03 |
[BOJ] 2512번: 예산 (0) | 2018.01.03 |
[BOJ] 1389번: 케빈 베이컨의 6단계 법칙 (0) | 2018.01.03 |
[BOJ] 1992번: 쿼드트리 (0) | 2018.01.03 |
Comments