-
백준 2467 용액, 2470 두 용액 - C++쾌락없는 책임 (공부)/알고리즘 문제풀이 2021. 6. 17. 21:17반응형
#include <iostream> #include <vector> #include <algorithm> using namespace std; int n, resL, resR; int main(){ scanf("%d", &n); vector<int> v(n); for(int i = 0; i < n; i++) scanf("%d", &v[i]); sort(v.begin(), v.end()); int left = 0; int right = n-1; int res = 2000000000; while(left < right){ int x = v[left]; int y = v[right]; if(abs(x + y) < res){ res = abs(x + y); resL = x; resR = y; } if(x + y < 0) left++; else right--; } printf("%d %d\n", resL, resR); }
놀랍게도 두 문제에서 원하는 내용이 비슷해 같은 코드로 가능했습니다. 차이가 제일 적은걸 구해야 하기 때문에 abs를 이용해서 가장 작은 값을 구하게 되고 만약 두개 더한 값이 음수라면 왼쪽에 있는 수가 음수라는 뜻이니 오른쪽으로 한한 옮긴 뒤 비교를 하고 양수인 경우 반대로 오른쪽 값을 왼쪽으로 옮겨 진행하면 됩니다.
반응형'쾌락없는 책임 (공부) > 알고리즘 문제풀이' 카테고리의 다른 글
백준 2206 벽 부수고 이동하기 - C++, BFS (0) 2021.06.23 백준 1865 웜홀 - C++, 벨만-포드 알고리즘 (0) 2021.06.18 백준 17404 RGB 거리 2 - DP (0) 2021.06.17 백준 11657 타임머신 - C++, 벨만포드 알고리즘 (0) 2021.06.15 백준 7579 앱 - C++, 배낭 문제 (0) 2021.06.15