배열로 주어진 몇 가지 점이 있다고 가정합니다. 모든 지점을 방문하는 데 필요한 최소 시간(초)을 찾아야 합니다. 몇 가지 조건이 있습니다.
- 1초 안에 수직, 수평, 대각선으로 움직일 수 있습니다.
- 배열에 나타나는 것과 같은 순서로 포인트를 방문해야 합니다.
따라서 점이 [(1, 1), (3, 4), (-1, 0)]이면 출력은 7이 됩니다. 최단 경로에 대한 시퀀스를 확인하면 시퀀스는 (1, 1 ), (2, 2), (3, 3), (3, 4), (2, 3), (1, 2), (0, 1), (-1, 0)
이것을 해결하기 위해 우리는 두 연속 점의 x 좌표 차이의 최대값과 두 연속 점의 y 좌표 차이의 최대값을 찾습니다. 최대값이 함께 추가됩니다.
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
#include <bits/stdc++.h> using namespace std; class Solution { public: int minTimeToVisitAllPoints(vector<vector<int>>& p) { int ans = 0; int n = p.size(); for(int i = 1; i < n; i++){ ans += max(abs(p[i][0] - p[i-1][0]), abs(p[i][1] - p[i-1] [1])); } return ans; } }; main(){ Solution ob; vector<vector<int>> c = {{1,1},{3,4},{-1,0}}; cout << ob.minTimeToVisitAllPoints(c); }
입력
[[1,1],[3,4],[-1,0]]
출력
7