https://www.acmicpc.net/problem/1448
해결방안 : 빨대를 내림차순으로 정렬한다.
그 후 for문을 돌리면서 max값을 배열[0] ~ 배열[n-1]순으로 설정하고
세 빨대의 길이가 삼각형이 성립하면 바로 루프를 탈출한다 (내림차순 정렬이기 때문에 삼각형이 성립하는 경우가 최대값이 된다)
삼각형이 만들어 질 수 없으면 -1을 출력해준다.
#include <stdio.h>
int compare(const void *a,const void *b){
int num1 = *(int *)a;
int num2 = *(int *)b;
if(num1 > num2){
return -1;
}
else if(num1 < num2){
return 1;
}
else{
return 0;
}
}
int main(void){
int arr[1000010];
int n;
scanf("%d",&n);
for(int i = 0;i<n;i++){
scanf("%d",&arr[i]);
}
qsort(arr,n,sizeof(int),compare); //내림차순 정렬
long long Max = 0;
//삼각형의 최대값 반복문을 끝내도 Max가 0이면 삼각형이 성립 안되는 조건이므로 -1을 찍는다
for(int i = 0;i<n;i++){
int max = arr[i]; //max를 배열의 i값으로
if(max < arr[i+1]+arr[i+2]){ //삼각형이 성립한다면
Max = arr[i] + arr[i+1] + arr[i+2]; //삼각형 세 변의 길이의 값을 Max로 바꾸고
break;//루프탈출
}
}
if(Max != 0){
printf("%lld",Max);
}
else{
printf("-1");
}
}
'알고리즘' 카테고리의 다른 글
백준 1316 C언어 (0) | 2022.02.23 |
---|---|
백준 14905 C언어 (0) | 2022.02.20 |
백준 1475 C언어 (0) | 2022.02.19 |
분할정복 (0) | 2022.02.15 |
백준 1912번 연속합 C언어 (0) | 2022.02.14 |