3503. 초보자를 위한 점프대 배치하기
로직은 우선 점프대를 오름차순으로 정렬한다.
그리고 가장 낮은 점프대(0번째)를 가운데에 넣고, 양 옆으로 번갈아 가면서 오름차순의 점프대를 넣어주면 된다.
양옆으로 넣어줘야 하기 때문에 deque 를 사용해서 문제를 풀었다.
이렇게 푼 이유는
만약 점프대가 오름차순으로 있다면, 원형이기 때문에 결국 가장 큰 점프대와 가장 낮은 점프대의 차이가 답으로 나올 것이다.
하지만 가장 낮은값을 가운데에 넣고, 그 앞뒤로 순차적으로 삽입을 하면, 평균적인 차이가 가장 낮게 나올 것이다.
<정답 코드>
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 52 53 54 55 56 57 58 59 60 61 62 63 | #include<iostream> #include<deque> #include<vector> #include<algorithm> using namespace std; int main() { int tc; cin >> tc; for (int t = 1; t <= tc; t++) { int n; cin >> n; vector<int> v(n); deque<int> dq; for (int i = 0; i < n; i++) { cin >> v[i]; } sort(v.begin(), v.end()); for (int i = 0; i < n; i++) { if (i == 0) { dq.push_front(v[i]); } else { if (i % 2 == 1) { dq.push_front(v[i]); } else { dq.push_back(v[i]); } } } int ans = 0; for (int i = 0; i < n; i++) { if (i == n - 1) { ans = ans < abs(dq[i] - dq[0]) ? abs(dq[i] - dq[0]) : ans; continue; } else { ans = ans < abs(dq[i] - dq[i + 1]) ? abs(dq[i] - dq[i + 1]) : ans; } } cout << ans << "\n"; } return 0; } | cs |
반응형
'알고리즘 > SW EXPERT' 카테고리의 다른 글
4053. 전국민 건강 프로젝트 (0) | 2018.03.21 |
---|---|
3809. 화섭이의 정수 나열 (0) | 2018.03.10 |
3289. 서로소 집합 (0) | 2018.03.04 |
3349. 최솟값으로 이동하기 (0) | 2018.03.04 |
3499. 퍼펙트 셔플 (0) | 2018.03.04 |