코드
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
ll n, a[5003],res, sol = 20000000009;
int solution[4]; // 결과 저장
int main() {
cin >> n;
for(int i = 0; i < n; i++) cin >> a[i];
sort(a, a + n);
// 하나는 고정을 위해 for문으로 전부 순회
for(int i = 0; i < n - 2; i++) {
// 나머지 두 용액은 투포인터로 찾기
int s = i + 1;
int e = n - 1;
while (s < e) {
int tmp = a[i] + a[s] + a[e];
// 0에서 가깝다 => 절대값
if(abs(tmp) < sol) {
sol = abs(tmp);
solution[0] = a[i];
solution[1] = a[s];
solution[2] = a[e];
}
// 0보다 용액이 크면 작은 것을 찾아야하므로 e--
if(tmp > 0) {
e--;
}
// 0보다 용액이 작으면, 더 큰 값을 찾아야하므로 s++
else {
s++;
}
}
}
// 결과 출력
cout << solution[0] << " " << solution[1] << " " << solution[2] << '\n';
return 0;
}
풀이
용액 문제에서 용액의 수가 1개 늘어난 것과 정렬을 해야한다는 조건이 붙어있다. 기존 용액 2개는 투 포인터로 찾았는데 3개로 늘어난 것은 어떻게 해야할까 고민했다. 그러다가 for문으로 모두 찾아주면 되겠다는 생각을 했고, 데이터 수가 5000이라 충분히 될 것이라 예상했다. 용액의 수가 3개이므로 int의 범위를 넘어설 수 있으니 long long을 사용했다.
'백준' 카테고리의 다른 글
[백준] 2623번 음악프로그램 C++ 코드 (0) | 2024.08.11 |
---|---|
[백준] 15681번 트리와 쿼리 C++ 코드 (0) | 2024.08.11 |
[백준] 1806번 부분합 C++ 코드 (0) | 2024.08.11 |
[백준] 2166번 다각형의 면적 C++ 코드 (0) | 2024.08.11 |
[백준] 2961번 도영이가 만든 맛있는 음식 C++ 코드 (0) | 2024.08.08 |