풀이 아이디어
모든 도미노를 순회하면서
i번째 도미노를 왼쪽으로 넘어트렸을 때
연쇄 반응이 완료되는 지점에서 -1인 o
dp[i] = min (dp[i] , dp[o] + 1)
i번째 도미노를 오른쪽으로 넘어트렸을 때
연쇄 반응이 완료되는 지점인 k
dp[k] = min(dp[i-1] + 1 , dp[k])
를 dp로 계산해서 n-1 지점을 출력하면 된다.
n이 300임으로 연쇄반응이 끊기는 지점을 순회해서 돌더라도
시간복잡도 O(n^2)안에 풀 수 있다.
시행착오
처음에는 유니온파인드와 그리디를 이용하여
가장 많이 넘어트릴 수 있는 도미노를 구해서 풀리는가 생각해봤는데
도미노가
1 1 1 1 10 5 4 3 2 1 이런식으로 배치된다면 해를 내지 못하게 된다.
최적화하기
똑같은 조건으로 n이 50만인 문제가 존재하기 때문에 더 빠른 방법이 존재하다.
추측하건데 연쇄반응이 끊기는 지점을 더 빠르게 풀면 되는데 확실하게 최적화 할 방법이 생각나진 않는다.
태그가 세그먼트 트리인걸로 봐서 O(NlogN)...
'코딩 공부 > 백준' 카테고리의 다른 글
[백준] 12982 공 포장하기 2 (1) | 2025.01.28 |
---|---|
[백준] 1242 소풍 (1) | 2025.01.20 |
[백준] 26599 용 조련사 룰루 (1) | 2025.01.14 |
[백준] 16118 달빛 여우 (0) | 2025.01.10 |
[백준] 13415 정렬 게임 (1) | 2025.01.01 |