[C++] BOJ 2473 - ์ธ ์ฉ์กProblem Solving/Baekjoon Online Judge (BOJ)2025. 4. 12. 22:16
Table of Contents

01. ๐ ๋ฌธ์ ํ์
N: ์ ์ฒด ์ฉ์ก์ ์ (3 <= N <= 5,000)
์ฐ์ฑ ์ฉ์ก (1 ~ 1e9)
์์นผ๋ฆฌ์ฑ ์ฉ์ก (-1e9 ~ -1)
* ์๋ก ๋ค๋ฅธ ์ฉ์ก 3๊ฐ์ง๋ฅผ ํผํฉํ์ฌ ํน์ฑ๊ฐ์ด 0์ ๊ฐ๊น์ด ํผํฉ ์ฉ์ก์ ๋ง๋๋ ์ธ ์ฉ์ก์ ํน์ฑ๊ฐ ์ถ๋ ฅ
๊ฐ์ ์ข
๋ฅ(์ฐ์ฑ, ์์นผ๋ฆฌ์ฑ)๋ง ํผํฉ ๊ฐ๋ฅ
ํ์ง๋ง, ๊ฐ์ ํน์ฑ ๊ฐ์ ๊ฐ์ง๋ ์ฉ์ก์ ์ค๋ณตํ์ฌ ํผํฉํ ์๋ ์์
01-1. ๊ฐ๋ฅํ ์๊ฐ ๋ณต์ก๋
- N์ ์ต๋๊ฐ 5,000์ผ๋ก ์๊ฐ ๋ณต์ก๋๊ฐ O(N^2 log N) ์ดํ๋ก ๊ตฌํ ๊ฐ๋ฅ
01-2. ์๊ณ ๋ฆฌ์ฆ ์ ํ
- ํฌ ํฌ์ธํฐ๋ก ๊ตฌํํ ๊ฒฝ์ฐ, ์๊ฐ ๋ณต์ก๋๊ฐ O(N^2)์ผ๋ก ๊ตฌํ๊ฐ๋ฅ
- ์ด๋ถ ํ์์ผ๋ก ๊ตฌํํ ๊ฒฝ์ฐ, ์๊ฐ ๋ณต์ก๋๊ฐ O(N^2 log N)์ผ๋ก ๊ตฌํ ๊ฐ๋ฅ
02. ๐ ์ฝ๋ ์ค๊ณํ๊ธฐ
[ํฌ ํฌ์ธํฐ]
- N๊ณผ ํน์ฑ ๊ฐ์ N๊ฐ ์ ๋ ฅ
- ์ ๋ ฅ๋ ํน์ฑ ๊ฐ์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ
- ํน์ฑ ๊ฐ ํ๋๋ฅผ ๊ณ ์ ์์ผ๋๊ณ , ๋ท ๋ฒ์์์ ํฌ ํฌ์ธํฐ๋ก ์ต์ ์ ์กฐํฉ ํ์
- ํผํฉ ์ฉ์ก์ ํน์ฑ ๊ฐ์ด ํ์ฌ ์ต์ ํน์ฑ ๊ฐ๋ณด๋ค ์์ ๊ฒฝ์ฐ, ๊ฐ์ ๊ฐฑ์ ํ๊ณ ์ฉ์ก 3๊ฐ์ง๋ฅผ ๋ฐฐ์ด์ ์ ์ฅ
[์ด๋ถ ํ์]
- N๊ณผ ํน์ฑ ๊ฐ์ N๊ฐ ์ ๋ ฅ
- ์ ๋ ฅ๋ ํน์ฑ ๊ฐ์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ
- ํน์ฑ ๊ฐ 2๊ฐ(i, j)๋ฅผ ์ด์ค ๋ฐ๋ณต๋ฌธ์ผ๋ก N-2๊น์ง ํ์
- ํน์ฑ ๊ฐ 2๊ฐ๋ฅผ ํฉํ๊ณ ๋ถํธ๋ฅผ ๋ฐ๊พผ ๊ฐ์ target์ด๋ผ ์ ์
- ๋๋จธ์ง ํน์ฑ ๊ฐ ํ๋๋ j+1๋ถํฐ N-1๊น์ง ์ด๋ถ ํ์์ ํตํด target์ ํ์
- ํผํฉ ์ฉ์ก์ ํน์ฑ ๊ฐ์ด ํ์ฌ ์ต์ ํน์ฑ ๊ฐ๋ณด๋ค ์์ ๊ฒฝ์ฐ, ๊ฐ์ ๊ฐฑ์ ํ๊ณ ์ฉ์ก 3๊ฐ์ง๋ฅผ ๋ฐฐ์ด์ ์ ์ฅ
03. ๐ ๏ธ ์๋๋ณ ์์
1ํ์ฐจ
- ํฌ ํฌ์ธํฐ์์ 3 ์ฉ์ก์ ํฉ์ด 0์ผ ๋๋ฅผ ์ฒ๋ฆฌํด์ฃผ์ง ์์ ๋ฌดํ ๋ฃจํ๋จ -> ์์
04. ๐๏ธ ์ ๋ต ์ฝ๋
[ํฌ ํฌ์ธํฐ]
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int N;
vector<ll> v;
cin >> N;
for(int i = 0; i < N; i++){
int tmp;
cin >> tmp;
v.push_back(tmp);
}
sort(v.begin(), v.end());
ll best_val = LLONG_MAX;
int result[3];
for(int mid = 0; mid < N-2; mid++){
int start = mid+1, end = N-1;
while(start < end){
ll cur_val = v[start] + v[mid] + v[end];
if(llabs(cur_val) < best_val){
best_val = llabs(cur_val);
result[0] = v[mid];
result[1] = v[start];
result[2] = v[end];
}
if(cur_val < 0) start++;
else end--;
}
}
sort(result, result + 3);
for(auto& e : result) cout << e << " ";
return 0;
}
[์ด๋ถ ํ์]
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
int N;
vector<ll> v;
scanf("%d", &N);
for(int i = 0; i < N; i++){
ll tmp;
scanf("%lld", &tmp);
v.push_back(tmp);
}
sort(v.begin(), v.end());
ll best_val = LLONG_MAX;
ll result[3];
for(int i = 0; i < N-2; i++){
for(int j = i+1; j < N-1; j++){
ll target = -(v[i] + v[j]);
int left = j+1, right = N-1;
while(left <= right){
int mid = (left + right) / 2;
ll cur_val = v[i] + v[j] + v[mid];
if(llabs(cur_val) < best_val){
best_val = llabs(cur_val);
result[0] = v[i];
result[1] = v[j];
result[2] = v[mid];
}
if(v[mid] < target) left = mid + 1;
else right = mid - 1;
}
}
}
sort(result, result+3);
for(auto& e : result) printf("%lld ", e);
return 0;
}'Problem Solving > Baekjoon Online Judge (BOJ)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [C++] BOJ 1561 - ๋์ด ๊ณต์ (1) | 2025.04.14 |
|---|---|
| [C++] BOJ 12015 - ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด 2 (0) | 2025.04.13 |
| [C++] BOJ 1477 - ํด๊ฒ์ ์ธ์ฐ๊ธฐ (0) | 2025.04.11 |
| [C++] BOJ 1806 - ๋ถ๋ถํฉ (0) | 2025.04.10 |
| [C++] BOJ 8895 - ๋ง๋ ๋ฐฐ์น (0) | 2025.04.10 |
@ONE_ :: ์ ํธ์
์๋ชป๋ ์ ๋ณด๊ฐ ์๋ค๋ฉด ๋ง์ํด์ฃผ์ธ์!