728x90
반응형
https://www.acmicpc.net/problem/2467
2467번: 용액
첫째 줄에는 전체 용액의 수 N이 입력된다. N은 2 이상 100,000 이하의 정수이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 오름차순으로 입력되며, 이 수들은 모두 -
www.acmicpc.net
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> v;
int t;
for(int i = 0; i < n; i++) {
cin >> t;
v.push_back(t);
}
long long min = 987654321;
long long a = 0;
long long b = 0;
int l = 0;
int r = v.size() - 1;
while(l < r){
int sum = v[l] + v[r];
if(abs(sum) < min){
min = abs(sum);
a = v[l];
b = v[r];
}
if(sum <= 0) l++;
else r--;
}
cout << a << " " << b << endl;
return 0;
}
이미 정렬된 배열이 들어오므로
1. 두 포인터 l과 r에 첫 요소와 마지막 요소의 인덱스값을 넣는다.
2. l과 r의 합이 양수일 경우에는 r이 더 작아져야 하므로 r을 하나 앞으로 옮겨준다.
l과 r의 합이 음수일 경우네는 l이 더 커져야 하므로 l을 하나 뒤로 옮겨준다.
3. 이 때, l과 r의 합의 절댓값이 이전에 기억해둔 l과 r의 합의 절댓값보다 작다면 이 값과 l, r 값을 기억해둔다.
728x90
반응형
'Algorithm > BAEKJOON' 카테고리의 다른 글
[BOJ] 10026번 적록색약 (C++) (0) | 2022.05.19 |
---|---|
[BOJ] 22945번 팀 빌딩 (C++) (0) | 2022.05.18 |
[BOJ] 11055번 가장 큰 증가 부분 수열 (C++) (0) | 2022.05.16 |
[BOJ] 11053번 가장 긴 증가하는 부분 수열 (C++) (0) | 2022.05.16 |
[BOJ] 14567번 선수과목 (Prerequisite) (C++) (0) | 2022.05.15 |