ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 백준 1448(삼각형 만들기) c++
    백준 문제 2021. 9. 11. 15:43
    728x90

    문제

     

    1448번: 삼각형 만들기

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

    www.acmicpc.net

    숫자를 입력받아 삼각형을 만들 수 있으면 그중 가장큰 삼각형 세변의 길이를 출력하고 삼각형을 만들 수 없으면

    -1을 출력하는 문제입니다.

    삼각형이 이루어질 수 있는 조건은 세변중 가장큰변이 나머지 두변의 합보다 작으면 가능합니다.

    코드를 보겠습니다.

    int n;
    cin >> n;
    
    vector<int>v(n);
    for (int i = 0; i < n; i++) {
    	cin >> v[i];
    }

    먼저 변의 개수를 받아줄 n을 입력받고 벡터v에 넣어줍니다.

    sort(v.begin(), v.end(),cmp);
    bool find = false;
    for (int i = 0; i < n - 2; i++) {
    	if (v[i] < (v[i + 1] + v[i + 2])) {
    		cout << v[i] + v[i + 1] + v[i + 2];
    		find = true;
    		break;
    	}
    }
    if (!find)
    	cout << -1;
        
    bool cmp(int a, int b) {
    	return a > b;
    }

    모든 변을 입력받은 벡터를 내림차순으로 정렬해줍니다.

    sort함수는 기본적으로 오름차순으로 정렬해줌으로 boolen형 함수로 내림차순으로 정렬하게끔 만들어줍니다.

    가장 큰 길이의 삼각형을 만들어야 하기 때문에 벡터의 앞에서부터 확인하기 위함입니다.

    그다음 boolen형 변수 find를 false로 초기화 해줍니다. 

    삼각형이 제대로 만들어졌으면 find를 true로 바꾸고 그 값을 출력해주지만 만약 삼각형을 만들 수 없으면 find는 그대로

    false이므로 -1을 출력하게 됩니다.

    for문을 통해 i=0부터 n-3까지 반복을 하는데 v[i](삼각형중 가장큰변) <v[i+1](두번째 큰변)+v[i+2](세번째 큰변)

    을 만족하면 삼각형이 형성되므로 find 를true로 바꿔주고 세변의 합을 출력해주고 break함수로 탈출하게 됩니다.


    전체 코드입니다.

    #include<iostream>
    #include<algorithm>
    #include<vector>
    using namespace std;
    bool cmp(int a, int b);
    int main() {
    	ios_base::sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL);
    	int n;
    	cin >> n;
    
    	vector<int>v(n);
    	for (int i = 0; i < n; i++) {
    		cin >> v[i];
    	}
    	sort(v.begin(), v.end(),cmp);
    	bool find = false;
    	for (int i = 0; i < n - 2; i++) {
    		if (v[i] < (v[i + 1] + v[i + 2])) {
    			cout << v[i] + v[i + 1] + v[i + 2];
    			find = true;
    			break;
    		}
    	}
    	if (!find)
    		cout << -1;
    	
    	
    	return 0;
    }
    bool cmp(int a, int b) {
    	return a > b;
    }

    '백준 문제' 카테고리의 다른 글

    백준 17608(막대기) c++  (0) 2021.09.14
    백준 2437(저울) c++  (0) 2021.09.11
    백준 1377(버블 소트) c++  (0) 2021.09.11
    백준 11582(치킨 TOP N) C언어  (0) 2021.09.10
    백준 10610(30) c++  (0) 2021.09.09
Designed by Tistory.