백준 문풀

백준 2295 세 수의 합

조강학 2024. 9. 30. 16:13

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	int n;
	cin >> n;
	vector<int>arr(n,0);
	for (int i = 0; i < n; i++) {
		cin >> arr[i];
	}
	sort(arr.begin(), arr.end());

	int max;
	int x, y, z;
	for (int m = n - 1; m >= 0; m--) {
		max = arr[m];
		for (int j = m; j >= 0; j--) {
			y = arr[j];
			for (int i = j; i >= 0; i--) {
				x = arr[i];
				z = max - x - y;
				if (z < 0) continue;
				bool answer = binary_search(arr.begin(), arr.end(), z);
				if (answer) {
					cout << max;
					return 0;
				}
			}
		}
	}

	return 0;
}

 

숫자를 n 개 입력받아 arr벡터에 저장하고 이를 정렬해주었다.

삼중 for문을 이용하여 풀이했다.

오름차순으로 정렬한 arr백터 배열을 뒤에서 n-1번 원소부터 탐색한다. 

첫 for문에서는 최대값을 선정해주었다. 

두번째, 세번째 for문을 통해서는  두 숫자를 선택한다. 최댓값에서 선택한 두 숫자를 뺀 값을 내장함수 binary_search를 통해 찾는다. 값이 존재한다면 현재 최대값으로 설정된 값을 출력하고 종료하고 아니라면 다음 반복으로 넘어가 max값이 점점 작아지도록 찾아본다.

 

 

 

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

백준 2656 전깃줄  (0) 2024.11.05
백준 1920 수 찾기  (0) 2024.09.30
백준 2110 공유기 설치  (1) 2024.09.30
Bfs Dfs  (0) 2024.09.23
백준 1654 랜선 자르기  (0) 2024.09.08