처음에는 산성, 알칼리 용액을 나눠서 계산하다 보니 계속 틀려서 블로그를 참고하여 풀었다.
투 포인터를 활용해서 풀려고 했는데, 풀고나니 이 문제는 절댓값을 활용해서 푸는 것이 더 효율적이라고 생각한다.
기존 접근 방식(오답)
- 산성 용액과 알칼리 용액을 나눠서 저장 후 정렬한다
- 알칼리 용액만 있는 경우, 산성 용액만 있는 경우 각 배열의 첫번째, 두번째 원소의 값이 최솟값이므로, 출력 후 종료한다.
정렬기준을 절댓값으로 한 풀이(정답)
- 산성 용액과 알칼리 용액을 나누지 않고 전부 하나의 배열에 입력 받는다.
- sort함수로 정렬한다. 단, 절댓값으로 정렬할 수 있도록 비교함수는 따로 만든다.
소스코드
#include<bits/stdc++.h>
#define endl "\n"
#define MAX 10
using namespace std;
int n, tmp, idx_left, idx_right;
int sum = 2000000000;
vector<int>v;
bool cmp(int a, int b){
return abs(a) < abs(b);
}
int main() {
ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
//freopen("input.txt", "r", stdin);
cin>>n;
for(int i=0; i<n; i++){
cin>>tmp;
v.push_back(tmp);
}
sort(v.begin(), v.end(), cmp); // 절댓값을 기준으로 정렬
for(int i=0; i<n-1; i++){
int res = v[i]+v[i+1];
if(abs(res)<abs(sum)){
sum = res;
idx_left=v[i];
idx_right=v[i+1];
}
}
if(idx_left>idx_right){
swap(idx_left, idx_right);
}
cout<<idx_left<<' '<<idx_right;
return 0;
}
'Problem Solving > 백준' 카테고리의 다른 글
[BOJ, 삼성 SW 역량 테스트 기출 문제] 19238번 : 스타트 택시 (0) | 2020.10.09 |
---|---|
[BOJ, 삼성 SW 역량 테스트 기출 문제] 16236번 : 아기상어 (0) | 2020.10.09 |
[BOJ 백준] 12757번 : 전설의 JBNU (0) | 2020.09.29 |
[BOJ 백준] 1092번 : 배 (C++, Python) (2) | 2020.09.28 |
[BOJ 백준] 13549번 : 숨바꼭질3 (0) | 2020.09.21 |