자기개발👨‍💻/코딩 알고리즘

[C++] 백준 1448 삼각형 만들기

천숭이 2022. 2. 28. 01:19

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

 

1448번: 삼각형 만들기

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

www.acmicpc.net

#include <iostream>
#include <vector>
#include <algorithm>
#include <algorithm>
using namespace std;

int main(int argc, char** argv) {
	int n, tmp, result=0;
	vector<int> v;
	vector<int> isin;
	vector<int>::iterator it;
	
	cin >> n;
	for (int i=0;i<n;i++){
		cin >> tmp;
		v.push_back(tmp);
	}
	
	// 내림차순 (큰 수가 왼쪽) 
	sort(v.begin(), v.end()); reverse(v.begin(), v.end());
	
	for(int i=0;i<n-2;i++){
		if (i+2 == n) break; 
		if (v[i]<v[i+1] + v[i+2]){
			result = max(result, v[i]+v[i+1]+v[i+2]);
		}
	}
	
	if (result == 0) cout<<-1;
	else cout<<result;

}

- 큰수는 무조건 왼쪽에 위치하기에 max 추출 굳이 안해도된다.

- 3중첩 for문을 시도했지만 계속 시간초과가 났다

    -> 1for문으로 충분히 가능했다는 것을 깨닫고 이를 해결.