https://www.acmicpc.net/problem/2467
๋ฌธ์
KOI ๋ถ์ค ๊ณผํ์ฐ๊ตฌ์์์๋ ๋ง์ ์ข ๋ฅ์ ์ฐ์ฑ ์ฉ์ก๊ณผ ์์นผ๋ฆฌ์ฑ ์ฉ์ก์ ๋ณด์ ํ๊ณ ์๋ค. ๊ฐ ์ฉ์ก์๋ ๊ทธ ์ฉ์ก์ ํน์ฑ์ ๋ํ๋ด๋ ํ๋์ ์ ์๊ฐ ์ฃผ์ด์ ธ์๋ค. ์ฐ์ฑ ์ฉ์ก์ ํน์ฑ๊ฐ์ 1๋ถํฐ 1,000,000,000๊น์ง์ ์์ ์ ์๋ก ๋ํ๋ด๊ณ , ์์นผ๋ฆฌ์ฑ ์ฉ์ก์ ํน์ฑ๊ฐ์ -1๋ถํฐ -1,000,000,000๊น์ง์ ์์ ์ ์๋ก ๋ํ๋ธ๋ค.
๊ฐ์ ์์ ๋ ์ฉ์ก์ ํผํฉํ ์ฉ์ก์ ํน์ฑ๊ฐ์ ํผํฉ์ ์ฌ์ฉ๋ ๊ฐ ์ฉ์ก์ ํน์ฑ๊ฐ์ ํฉ์ผ๋ก ์ ์ํ๋ค. ์ด ์ฐ๊ตฌ์์์๋ ๊ฐ์ ์์ ๋ ์ฉ์ก์ ํผํฉํ์ฌ ํน์ฑ๊ฐ์ด 0์ ๊ฐ์ฅ ๊ฐ๊น์ด ์ฉ์ก์ ๋ง๋ค๋ ค๊ณ ํ๋ค.
์๋ฅผ ๋ค์ด, ์ฃผ์ด์ง ์ฉ์ก๋ค์ ํน์ฑ๊ฐ์ด [-99, -2, -1, 4, 98]์ธ ๊ฒฝ์ฐ์๋ ํน์ฑ๊ฐ์ด -99์ธ ์ฉ์ก๊ณผ ํน์ฑ๊ฐ์ด 98์ธ ์ฉ์ก์ ํผํฉํ๋ฉด ํน์ฑ๊ฐ์ด -1์ธ ์ฉ์ก์ ๋ง๋ค ์ ์๊ณ , ์ด ์ฉ์ก์ ํน์ฑ๊ฐ์ด 0์ ๊ฐ์ฅ ๊ฐ๊น์ด ์ฉ์ก์ด๋ค. ์ฐธ๊ณ ๋ก, ๋ ์ข ๋ฅ์ ์์นผ๋ฆฌ์ฑ ์ฉ์ก๋ง์ผ๋ก๋ ํน์ ๋ ์ข ๋ฅ์ ์ฐ์ฑ ์ฉ์ก๋ง์ผ๋ก ํน์ฑ๊ฐ์ด 0์ ๊ฐ์ฅ ๊ฐ๊น์ด ํผํฉ ์ฉ์ก์ ๋ง๋๋ ๊ฒฝ์ฐ๋ ์กด์ฌํ ์ ์๋ค.
์ฐ์ฑ ์ฉ์ก๊ณผ ์์นผ๋ฆฌ์ฑ ์ฉ์ก์ ํน์ฑ๊ฐ์ด ์ ๋ ฌ๋ ์์๋ก ์ฃผ์ด์ก์ ๋, ์ด ์ค ๋ ๊ฐ์ ์๋ก ๋ค๋ฅธ ์ฉ์ก์ ํผํฉํ์ฌ ํน์ฑ๊ฐ์ด 0์ ๊ฐ์ฅ ๊ฐ๊น์ด ์ฉ์ก์ ๋ง๋ค์ด๋ด๋ ๋ ์ฉ์ก์ ์ฐพ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์๋ ์ ์ฒด ์ฉ์ก์ ์ N์ด ์ ๋ ฅ๋๋ค. N์ 2 ์ด์ 100,000 ์ดํ์ ์ ์์ด๋ค. ๋์งธ ์ค์๋ ์ฉ์ก์ ํน์ฑ๊ฐ์ ๋ํ๋ด๋ N๊ฐ์ ์ ์๊ฐ ๋น์นธ์ ์ฌ์ด์ ๋๊ณ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฅ๋๋ฉฐ, ์ด ์๋ค์ ๋ชจ๋ -1,000,000,000 ์ด์ 1,000,000,000 ์ดํ์ด๋ค. N๊ฐ์ ์ฉ์ก๋ค์ ํน์ฑ๊ฐ์ ๋ชจ๋ ์๋ก ๋ค๋ฅด๊ณ , ์ฐ์ฑ ์ฉ์ก๋ง์ผ๋ก๋ ์์นผ๋ฆฌ์ฑ ์ฉ์ก๋ง์ผ๋ก ์ ๋ ฅ์ด ์ฃผ์ด์ง๋ ๊ฒฝ์ฐ๋ ์์ ์ ์๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ํน์ฑ๊ฐ์ด 0์ ๊ฐ์ฅ ๊ฐ๊น์ด ์ฉ์ก์ ๋ง๋ค์ด๋ด๋ ๋ ์ฉ์ก์ ํน์ฑ๊ฐ์ ์ถ๋ ฅํ๋ค. ์ถ๋ ฅํด์ผ ํ๋ ๋ ์ฉ์ก์ ํน์ฑ๊ฐ์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ถ๋ ฅํ๋ค. ํน์ฑ๊ฐ์ด 0์ ๊ฐ์ฅ ๊ฐ๊น์ด ์ฉ์ก์ ๋ง๋ค์ด๋ด๋ ๊ฒฝ์ฐ๊ฐ ๋ ๊ฐ ์ด์์ผ ๊ฒฝ์ฐ์๋ ๊ทธ ์ค ์๋ฌด๊ฒ์ด๋ ํ๋๋ฅผ ์ถ๋ ฅํ๋ค.
ํ์ด
์ ๋๊ฐ ํจ์ ๊ธฐ์ต ์๋์ ๊ทธ๋ฅ ๊ตฌํํด์ ์ผ๋ค.
left์ right ์ธ๋ฑ์ค ๋๊ฐ๋ฅผ ์ง์ ํด์ ๋ง์กฑํ๋ ์์ ์ฐพ๋ ๋ฌธ์ ์ด๋ฏ๋ก ํฌํฌ์ธํฐ
// ํ์ด : https://whkakrkr.tistory.com
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int getAbs(int num) {
if(num<0) {
return num*-1;
}
return num;
}
int main() {
int n;
cin >> n;
vector<int>v(n);
for(int i=0; i<n; i++) {
cin >> v[i];
}
int left=0, right=n-1;
int cur = v[left] + v[right];
pair<int, int> ans = {left, right};
while(left<right) {
int sum = v[left] + v[right];
if(getAbs(sum) < getAbs(cur)) {
cur = sum;
ans = {left, right};
}
if(sum<0) {
left++;
} else {
right--;
}
}
cout << v[ans.first] << " " << v[ans.second];
return 0;
}
'๐๏ธ ICPC Sinchon > Two Pointer' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ][C++] ๋ฐฑ์ค 1806๋ฒ: ๋ถ๋ถํฉ (0) | 2024.08.28 |
---|---|
[BOJ][C++] ๋ฐฑ์ค 7795๋ฒ: ๋จน์ ๊ฒ์ธ๊ฐ ๋จนํ ๊ฒ์ธ๊ฐ (0) | 2024.08.19 |
[BOJ][C++] ๋ฐฑ์ค 2003๋ฒ: ์๋ค์ ํฉ 2 (0) | 2023.07.27 |
[BOJ S1][C++] ๋ฐฑ์ค 2531๋ฒ: ํ์ ์ด๋ฐฅ (0) | 2022.10.20 |
๋ฐฑ์ค 10025๋ฒ: ๊ฒ์ผ๋ฅธ ๋ฐฑ๊ณฐ (0) | 2022.10.18 |