https://www.acmicpc.net/problem/2467
2467번: 용액
첫째 줄에는 전체 용액의 수 N이 입력된다. N은 2 이상 100,000 이하의 정수이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 오름차순으로 입력되며, 이 수들은 모두 -
www.acmicpc.net
[난이도] Gold5
[유형] 투포인터
[풀이]
가장 작은 수의 index 0을 l, 가장 큰 수의 index N-1을 r로 설정한 뒤
a[l]+a[r]의 합이 양수이면 r--을 해주어 0과 가깝게 해주고
음수이면 l++을 해주어 0과 가깝게 해주는 방식으로 0과 가까운 후보들을 모두 훑을 수 있다.
#include <cstdio>
#include <cmath>
using namespace std;
int N,a[100000];
int main(){
scanf("%d",&N);
for(int i=0;i<N;i++) scanf("%d",&a[i]);
int l=0,r=N-1,ans=2e9+1;
int al=l,ar=r;
while(l<r){
int v = a[l]+a[r];
if(abs(v)<ans){
al=l;
ar=r;
ans=abs(v);
}
if(v==0) break;
else if(v>0) r--;
else l++;
}
printf("%d %d",a[al],a[ar]);
}
https://github.com/has2/Problem-Solving/blob/master/boj-solved.ac/Gold5/2467.cpp
'Problem-Solving > BOJ' 카테고리의 다른 글
[BOJ/백준][Gold5] 1747 : 소수&팰린드롬 (C++) (0) | 2021.06.07 |
---|---|
[BOJ/백준][Gold5] 2212 : 센서 (C++) (0) | 2021.06.07 |
[BOJ/백준][Gold5] 1068 : 트리 (C++) (0) | 2021.06.07 |
[BOJ/백준][Gold5] 5430 : AC (C++) (0) | 2021.06.07 |
[BOJ/백준][Silver1] 1790 : 수 이어 쓰기2 (C++) (0) | 2021.06.07 |