$O(n\lg n)$
정렬하고 인접한 세 변의 길이가 삼각형을 만들 수 있는 경우 중 최대 합을 구한다.
#include<cstdio> #include<algorithm> using namespace std; int i, a[1000000], n; int main() { scanf("%d", &n); for (i = 0; i < n; i++) scanf("%d", a + i); sort(a, a + n); for (i = n - 1; i > 1; i--) if (a[i] < a[i - 1] + a[i - 2]) { printf("%d", a[i] + a[i - 1] + a[i - 2]); return 0; } puts("-1"); return 0; }
댓글 없음 :
댓글 쓰기