코학다식
[백준/BOJ/C언어] 2470번 :: 두 용액 본문
Solution
처음에는 양수 배열과 음수 배열로 나누어서 이분 탐색을 실행하는 걸 고민해 봤는데, 번거로운 것 같고 다른 방법이 있을 것 같아 다른 방법을 찾다 절댓값으로 정렬해서 이웃한 두 수를 더하는 방법을 사용했다. 이 방법을 사용하면 모두 양수인 경우, 모두 음수인 경우도 쉽게 해결할 수 있다. 대충 봤을 때 값이 꽤 커 보이기에 모든 변수를 long long
으로 선언해 줬다. +) C++의 sort
함수는 정말 자주 유용하게 쓰이는 것 같다.
code
#include <cstdio>
#include <vector>
#include <algorithm>
#include <cstring>
using namespace std;
vector <long long> ans;
bool cmp (const long long a, const long long b) {
if (abs(a) == abs(b))
return a < b;
else
return abs(a) < abs(b);
}
int main() {
int N;
long long in;
scanf("%d", &N);
for (int i = 0; i < N; i++) {
scanf("%lld", &in);
ans.push_back(in);
}
sort(ans.begin(), ans.end(), cmp);
long long min = 2100000000;
long long ans1, ans2;
for (int i = 0; i < N-1; i++) {
long long sum = ans[i] + ans[i + 1];
if (min > abs(sum)) {
min = abs(sum);
ans1 = ans[i];
ans2 = ans[i + 1];
}
}
if (ans1 > ans2)
printf("%lld %lld", ans2, ans1);
else
printf("%lld %lld", ans1, ans2);
return 0;
}
'Algorithm > Problem' 카테고리의 다른 글
[백준/BOJ/C++] 11657번 :: 타임머신 (0) | 2020.09.01 |
---|---|
[프로그래머스/C++] 섬 연결하기 (0) | 2020.09.01 |
[백준/BOJ/C언어] 10814번 :: 나이순 정렬 (0) | 2019.09.23 |
[백준/BOJ/C언어] 10211번 :: Maximum Subarray (0) | 2019.09.19 |
[백준/BOJ/C언어] 2805번 :: 나무 자르기 (0) | 2019.09.10 |
Comments