728x90
[Java] 다리 bridge - Uva 10037 문제
문제설명
내 코드
👑 Key Point
len<=2이면 손수 계산 해도 되지만,
len>2라면 이 때부터 최소가 되는 거리는 두가지 Case로 나뉜다. 최소가 되는 것은 이 두가지 중 하나 밖에 없음
Case 1 : dis[1]*2+ dis[0]+dis[j] : 처음 최소거리 2개(dis[0], dis[1]) 를 먼저 옮긴뒤 첫번째(dis[0])가 플래쉬를 가지고 되돌아 오고 ,맨 끝에 있는 최대의 거리 두가지(dis[j-1]+dis[j]) 를 같이 옮긴뒤 최소에서 두번째 dis[1]가 플래쉬를 가지고 되돌아오는 경우에 걸리는 거리
Case 2 : 2*dis[0]+dis[j]+dis[j-1] : 처음 최소거리랑 최대거리 (dis[0], dis[j]) 를 먼저 옮긴뒤 첫번째(dis[0])가 플래쉬를 가지고 되돌아 오고 ,처음 최소거리랑 그다음 최대거리 (dis[0]+dis[j-1]) 를 같이 옮긴뒤 최소거리 dis[0]가 플래쉬를 가지고 되돌아오는 경우에 걸리는 거리
if(dis[1]*2+ dis[0]+dis[j]<2*dis[0]+dis[j]+dis[j-1])
두가지를 for문에 넣고 비교한뒤 더 적게 걸리는 거리를 실행하고 j는 -2 시킨다.
여기까지가 최대거리 dis[j-1], dis[j] 두 개를 최소의 거리로 다리를 건너게 하고 플래쉬는 다시 처음에 있게 하는 방법이였음.
이것을 j가 2이하가 될때까지 반복.
응용된 Greedy 문제인데 알고보면 재밌는 문제!
728x90
반응형
'💡 CodingTest > UVa' 카테고리의 다른 글
[Java] 비토와 친적들 (Vito's Family) - UVa 10041 문제 (0) | 2020.10.12 |
---|---|
[Java] 구두 수선공 문제 (shoemaker's problem) - UVa 10026 문제 (0) | 2020.10.12 |
[Java] 백준 1786번 찾기 문제 - KMP 알고리즘 (0) | 2020.10.05 |
[Java] UVa 848번 문제 - fmt (0) | 2020.10.05 |
[Java] UVa 10150 더블릿(Doublets) 문제 - BFS 최단경로 알고리즘 (0) | 2020.10.05 |