3349. 최솟값으로 이동하기
처음에는 BFS를 삼차원배열로 풀었더니 런타임에러...
그래서 생각해보니, 그냥 좌표값만을 가지고 충분히 거리를 구할 수 있었다.
(x1,y1)->(x2,y2) 로 이동한다고 했을 때 , (x2-x1)*(y2-y1) 이 양수라면, 이는 북동 혹은 남서로 이동하므로, 지름길을 사용할 수 있게 된다.
따라서 그런 경우에 따라서 나누면, 좌표값만을 가지고 충분히 거리를 구할 수 있게 된다.
<정답 코드>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | #include<iostream> #include<vector> #include<algorithm> using namespace std; int main() { int tc; cin >> tc; for (int t = 1; t <= tc; t++) { int h, w, n,ans=0; cin >> h >> w >> n; vector<pair<int, int>> v(n); for (int i = 0; i < n; i++) { cin >> v[i].first >> v[i].second; } for (int i = 0; i < n-1; i++) { int x1 = v[i].first, y1 = v[i].second; int x2 = v[i + 1].first, y2 = v[i + 1].second; int X = x2 - x1; int Y = y2 - y1; if (X*Y > 0) { if (abs(X) > abs(Y)) { ans += abs(Y)+ (abs(X) - abs(Y)); } else { ans += abs(X)+ (abs(Y) - abs(X)); } } else { ans += (abs(X) + abs(Y)); } } cout << "#" << t << " " << ans << "\n"; } return 0; } | cs |
반응형
'알고리즘 > SW EXPERT' 카테고리의 다른 글
3503. 초보자를 위한 점프대 배치하기 (0) | 2018.03.05 |
---|---|
3289. 서로소 집합 (0) | 2018.03.04 |
3499. 퍼펙트 셔플 (0) | 2018.03.04 |
3752. Digit sum (0) | 2018.03.03 |
3752. 가능한 시험 점수 (4) | 2018.03.03 |