※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 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;
}
728x90

'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

+ Recent posts