문제링크 : https://www.acmicpc.net/problem/11497
11497번: 통나무 건너뛰기
남규는 통나무를 세워 놓고 건너뛰기를 좋아한다. 그래서 N개의 통나무를 원형으로 세워 놓고 뛰어놀려고 한다. 남규는 원형으로 인접한 옆 통나무로 건너뛰는데, 이때 각 인접한 통나무의 높이
www.acmicpc.net
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define MAX 987654321
#define pii pair <int, int>
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int T;
cin >> T;
int N;
int arr[10001];
while(T--)
{
cin >> N;
for(int i=0; i<N; i++)
{
cin >> arr[i];
}
sort(arr, arr+N);
int result = arr[1] - arr[0];
for(int i=0; i<N-2; i++) //정렬후 한칸 건너뛰기
{
result = max(result, abs(arr[i]-arr[i+2]));
}
cout << result << "\n";
}
return 0;
}
처음에 그냥 정렬을 하면 맨첫 값과 맨끝 값의 차가 너무 커지게 된다.
이를 보완하기 위해 기존 정렬한 배열에서 한칸만 건너뛰고 높이 차를 구해준다.
result에는 처음에 arr[1] - arr[0]을 넣어주는데 이는 양끝값의 차가 가장 최소인 값이다.
이러면 2 4 5 7 9배열을 기준으로 2 5 9 7 4 배열이 생기게된다.
2 -> 5
5 -> 9
4 -> 7 (끝 값이 4)
'백준 > 실버' 카테고리의 다른 글
[백준 16194번] 카드 구매하기 2 (C++) (0) | 2023.05.04 |
---|---|
[백준 12789번] 도키도키 간식드리미 (0) | 2023.05.02 |
[백준 10158번] 개미 (C++) (0) | 2023.04.28 |
[백준 18352번] 특정 거리의 도시 찾기 (C++) (0) | 2023.04.26 |
[백준 15903번] 카드 합체 놀이 (C++) (0) | 2023.04.24 |