하루하루 꾸준히, 인생은 되는대로

알고리즘

백준 1448 C언어

긤효중 2022. 2. 17. 14:23

https://www.acmicpc.net/problem/1448

 

1448번: 삼각형 만들기

첫째 줄에 빨대의 개수 N이 주어진다. N은 3보다 크거나 같고, 1,000,000보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에 빨대의 길이가 한 줄에 하나씩 주어진다. 빨대의 길이는 1,000,000보다

www.acmicpc.net


해결방안 : 빨대를 내림차순으로 정렬한다.

그 후 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