https://www.acmicpc.net/problem/2473
๋ฌธ์
KOI ๋ถ์ค ๊ณผํ์ฐ๊ตฌ์์์๋ ๋ง์ ์ข ๋ฅ์ ์ฐ์ฑ ์ฉ์ก๊ณผ ์์นผ๋ฆฌ์ฑ ์ฉ์ก์ ๋ณด์ ํ๊ณ ์๋ค. ๊ฐ ์ฉ์ก์๋ ๊ทธ ์ฉ์ก์ ํน์ฑ์ ๋ํ๋ด๋ ํ๋์ ์ ์๊ฐ ์ฃผ์ด์ ธ์๋ค. ์ฐ์ฑ ์ฉ์ก์ ํน์ฑ๊ฐ์ 1๋ถํฐ 1,000,000,000๊น์ง์ ์์ ์ ์๋ก ๋ํ๋ด๊ณ , ์์นผ๋ฆฌ์ฑ ์ฉ์ก์ ํน์ฑ๊ฐ์ -1๋ถํฐ -1,000,000,000๊น์ง์ ์์ ์ ์๋ก ๋ํ๋ธ๋ค.
๊ฐ์ ์์ ์ธ ๊ฐ์ง ์ฉ์ก์ ํผํฉํ ์ฉ์ก์ ํน์ฑ๊ฐ์ ํผํฉ์ ์ฌ์ฉ๋ ๊ฐ ์ฉ์ก์ ํน์ฑ๊ฐ์ ํฉ์ผ๋ก ์ ์ํ๋ค. ์ด ์ฐ๊ตฌ์์์๋ ๊ฐ์ ์์ ์ธ ๊ฐ์ง ์ฉ์ก์ ํผํฉํ์ฌ ํน์ฑ๊ฐ์ด 0์ ๊ฐ์ฅ ๊ฐ๊น์ด ์ฉ์ก์ ๋ง๋ค๋ ค๊ณ ํ๋ค.
์๋ฅผ ๋ค์ด, ์ฃผ์ด์ง ์ฉ์ก๋ค์ ํน์ฑ๊ฐ์ด [-2, 6, -97, -6, 98]์ธ ๊ฒฝ์ฐ์๋ ํน์ฑ๊ฐ์ด -97์ -2์ธ ์ฉ์ก๊ณผ ํน์ฑ๊ฐ์ด 98์ธ ์ฉ์ก์ ํผํฉํ๋ฉด ํน์ฑ๊ฐ์ด -1์ธ ์ฉ์ก์ ๋ง๋ค ์ ์๊ณ , ์ด ์ฉ์ก์ด ํน์ฑ๊ฐ์ด 0์ ๊ฐ์ฅ ๊ฐ๊น์ด ์ฉ์ก์ด๋ค. ์ฐธ๊ณ ๋ก, ์ธ ์ข ๋ฅ์ ์์นผ๋ฆฌ์ฑ ์ฉ์ก๋ง์ผ๋ก๋ ํน์ ์ธ ์ข ๋ฅ์ ์ฐ์ฑ ์ฉ์ก๋ง์ผ๋ก ํน์ฑ๊ฐ์ด 0์ ๊ฐ์ฅ ๊ฐ๊น์ด ํผํฉ ์ฉ์ก์ ๋ง๋๋ ๊ฒฝ์ฐ๋ ์กด์ฌํ ์ ์๋ค.
์ฐ์ฑ ์ฉ์ก๊ณผ ์์นผ๋ฆฌ์ฑ ์ฉ์ก์ด ์ฃผ์ด์ก์ ๋, ์ด ์ค ๊ฐ์ ์์ ์ธ ๊ฐ์ ์๋ก ๋ค๋ฅธ ์ฉ์ก์ ํผํฉํ์ฌ ํน์ฑ๊ฐ์ด 0์ ๊ฐ์ฅ ๊ฐ๊น์ด ์ฉ์ก์ ๋ง๋ค์ด๋ด๋ ์ธ ์ฉ์ก์ ์ฐพ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์๋ ์ ์ฒด ์ฉ์ก์ ์ N์ด ์ ๋ ฅ๋๋ค. N์ 3 ์ด์ 5,000 ์ดํ์ ์ ์์ด๋ค. ๋์งธ ์ค์๋ ์ฉ์ก์ ํน์ฑ๊ฐ์ ๋ํ๋ด๋ N๊ฐ์ ์ ์๊ฐ ๋น์นธ์ ์ฌ์ด์ ๋๊ณ ์ฃผ์ด์ง๋ค. ์ด ์๋ค์ ๋ชจ๋ -1,000,000,000 ์ด์ 1,000,000,000 ์ดํ์ด๋ค. N๊ฐ์ ์ฉ์ก๋ค์ ํน์ฑ๊ฐ์ ๋ชจ๋ ๋ค๋ฅด๊ณ , ์ฐ์ฑ ์ฉ์ก๋ง์ผ๋ก๋ ์์นผ๋ฆฌ์ฑ ์ฉ์ก๋ง์ผ๋ก ์ ๋ ฅ์ด ์ฃผ์ด์ง๋ ๊ฒฝ์ฐ๋ ์์ ์ ์๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ํน์ฑ๊ฐ์ด 0์ ๊ฐ์ฅ ๊ฐ๊น์ด ์ฉ์ก์ ๋ง๋ค์ด๋ด๋ ์ธ ์ฉ์ก์ ํน์ฑ๊ฐ์ ์ถ๋ ฅํ๋ค. ์ถ๋ ฅํด์ผํ๋ ์ธ ์ฉ์ก์ ํน์ฑ๊ฐ์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ถ๋ ฅํ๋ค. ํน์ฑ๊ฐ์ด 0์ ๊ฐ์ฅ ๊ฐ๊น์ด ์ฉ์ก์ ๋ง๋ค์ด๋ด๋ ๊ฒฝ์ฐ๊ฐ ๋ ๊ฐ ์ด์์ผ ๊ฒฝ์ฐ์๋ ๊ทธ ์ค ์๋ฌด๊ฒ์ด๋ ํ๋๋ฅผ ์ถ๋ ฅํ๋ค.
ํ์ด
์ด๋์ ๊ฐ ๋ง์ด ๋ณธ ๋ฌธ์ ๋ค
[๐๏ธ ICPC Sinchon/Two Pointer] - [BOJ][C++] ๋ฐฑ์ค 2467๋ฒ: ์ฉ์ก
๋ค ๋๊ฐ๊ณ ๋ฑ ๋๊ฐ์ง๊ฐ ๋ค๋ฅด๋ค
1. ์ ๋ ฅ ๊ฐ์ด ์ค๋ฆ์ฐจ์์ผ๋ก ์ฃผ์ด์ง์ง ์์
2. ๋๊ฐ๊ฐ ์๋ ์ธ๊ฐ์ ์ฉ์ก ์กฐํฉ์ผ๋ก ์ฐพ์์ผํจ
1๋ฒ์ ์ ๋ ฅ๋ฐ์ ๋ฒกํฐ๋ฅผ sort๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌ ํด์ฃผ๋ฉด ํด๊ฒฐ๋๋ ๋์ด๊ฐ์.
2๋ฒ์ด ๋ฌธ์ ์ธ๋ฐ, ๊ธฐ์กด ๋ฌธ์ ์์๋ left์ right ํฌ์ธํฐ๋ฅผ ๋๊ฐ๋ฅผ ๋๊ณ ํ์๋ค
์ธ๊ฐ ์กฐํฉ์ ๊ตฌํด์ผํ๋ ํฌ์ธํฐ๋ฅผ ํ๋ ๋ ์ถ๊ฐํด์ฃผ์๋ค.
ํฌ์ธํฐ ํ๊ฐ๋ฅผ ๊ณ ์ ์ํค๊ณ ๊ธฐ์กด ๋ฌธ์ ํ๋ฏ์ด ํฌํฌ์ธํฐ ๋ก์ง์ผ๋ก ์กฐํฉ์ ๊ตฌํด์ฃผ๋ฉด ๋๋ค.
๊ณ ์ ์ํจ ํฌ์ธํฐ๋ for๋ฌธ ๋ฐ๋ณต๋ฌธ์ผ๋ก ๋๋ ค๋ฒ๋ฆฌ์
// ํ์ด : https://whkakrkr.tistory.com
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
long long getAbs(long long num) {
if(num<0) {
return num*-1;
}
return num;
}
int main() {
int n;
cin >> n;
vector<long long>v(n);
for(int i=0; i<n; i++) {
cin >> v[i];
}
sort(v.begin(), v.end());
int fixed=0, left=1, right=n-1;
tuple<int, int, int> ans = {fixed, left, right};
long long cur = getAbs(v[fixed] + v[left] + v[right]);
for(int i=0; i<n-2; i++) {
fixed = i;
left = i+1;
right = n-1;
while(left<right) {
long long sum = v[fixed] + v[left] + v[right];
if(getAbs(sum) < cur) {
cur = getAbs(sum);
ans = {fixed, left, right};
}
if(sum<0) {
left++;
} else {
right--;
}
}
}
cout << v[get<0>(ans)] << " " << v[get<1>(ans)] << " " << v[get<2>(ans)];
return 0;
}
'๐๏ธ ICPC Sinchon > Two Pointer' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ][C++] ๋ฐฑ์ค 1593๋ฒ: ๋ฌธ์ ํด๋ (0) | 2024.08.30 |
---|---|
[BOJ][C++] ๋ฐฑ์ค 15565๋ฒ: ๊ท์ฌ์ด ๋ผ์ด์ธ (0) | 2024.08.29 |
[BOJ][C++] ๋ฐฑ์ค 1806๋ฒ: ๋ถ๋ถํฉ (0) | 2024.08.28 |
[BOJ][C++] ๋ฐฑ์ค 7795๋ฒ: ๋จน์ ๊ฒ์ธ๊ฐ ๋จนํ ๊ฒ์ธ๊ฐ (0) | 2024.08.19 |
[BOJ][C++] ๋ฐฑ์ค 2467๋ฒ: ์ฉ์ก (0) | 2024.08.18 |