-
백준 1448(삼각형 만들기) c++백준 문제 2021. 9. 11. 15:43728x90
숫자를 입력받아 삼각형을 만들 수 있으면 그중 가장큰 삼각형 세변의 길이를 출력하고 삼각형을 만들 수 없으면
-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