※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 1448번 문제인 삼각형 만들기이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/1448
1448번: 삼각형 만들기
첫째 줄에 빨대의 개수 N이 주어진다. N은 3보다 크거나 같고, 1,000,000보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에 빨대의 길이가 한 줄에 하나씩 주어진다. 빨대의 길이는 1,000,000보다
www.acmicpc.net
주어진 변 중 가장 긴 변 a를 포함하는 삼각형이 존재하려면 길이의 합이 가장 긴 변보다 큰 서로 다른 두 변 b와 c가 있어야 한다. 그러한 b와 c가 존재하는지의 여부를 a 다음으로 가장 긴 두 개의 변을 b와 c로 시험해보자. 이 두 변으로 추가해 삼각형을 구성할 수 있다면 a, b와 c로 이루어진 삼각형이 a를 가장 긴 변으로 갖는 삼각형 중 가장 둘레가 긴 삼각형이 될 것이고, 구성할 수 없다면 a를 가장 긴 변으로 갖는 삼각형이 존재하지 않는다는 것을 알 수 있게 된다.
따라서, 가장 긴 변서부터 삼각형을 구성하는 가장 긴 변의 후보로 생각하고, 그 변을 가장 긴 변으로 포함하는 가장 큰 둘레의 삼각형들을 조사해나가는 것으로 문제를 해결할 수 있다.
이러한 과정은 변의 길이들을 미리 정렬하는 것으로 쉽게 구현할 수 있다.
아래는 제출한 소스코드이다.
#include <iostream>
#include <algorithm>
using namespace std;
int arr[1000000];
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int N; cin >> N;
for (int i = 0; i < N; i++) cin >> arr[i];
sort(arr, arr + N);
for (int i = N - 1; i > 1; i--) {
if (arr[i - 2] + arr[i - 1] > arr[i]) {
cout << arr[i - 2] + arr[i - 1] + arr[i];
return 0;
}
}
cout << -1;
}
'BOJ' 카테고리의 다른 글
[BOJ 24392 // C++] 영재의 징검다리 (0) | 2022.02.14 |
---|---|
[BOJ 24075 // C++] 計算 (Calculation) (0) | 2022.02.13 |
[BOJ 24379 // C++] КИФЛИЧКИ (0) | 2022.02.11 |
[BOJ 24377 // C++] ИГРА (0) | 2022.02.11 |
[BOJ 24378 // C++] КАСТИНГ (0) | 2022.02.11 |