728x90
반응형
https://www.acmicpc.net/problem/2470
2470번: 두 용액
첫째 줄에는 전체 용액의 수 N이 입력된다. N은 2 이상 100,000 이하이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 수들은 모두 -1,000,000,000 이상 1,000,00
www.acmicpc.net
1. Logic
음수와 양수가 섞여있기 때문에 먼저 오름차순으로 정렬을 한다.
두개의 포인터중 하나는 음수에서부터 하나은 양수에서 부터 서로 끝과 끝에서 가운데로 모이는 방식으로 투포인터를 적용한다.
2. Code
#include<bits/stdc++.h>
using namespace std;
const long long INF = 1e12;
vector<long long> ans(2);
vector<long long> vec;
int main() {
ios_base::sync_with_stdio(false); cout.tie(0); cin.tie(0);
long long n;
cin >> n;
for(long long i = 0; i < n; i++) {
long long a;
cin >> a;
vec.push_back(a);
}
sort(vec.begin(), vec.end());
long long start = 0;
long long end = n - 1;
long long tmep = INF; //가장 0에 가까운 합
while(start < end) {
long long sum = vec[start] + vec[end];
if (tmep > abs(sum) ) {
tmep = abs(sum);
ans[0] = vec[start];
ans[1] = vec[end];
if(sum == 0) break;
}
if (sum < 0)
start++;
else
end--;
}
cout << ans[0] << " " << ans[1];
}
3. Feedback
- 실행했을때 극한의 테스트 케이스를 넣으면 INF로 넣은 엄청 큰 수 보다 더 큰수가 들어올 수 있어서 if문에 걸리지 않아 틀렸다고 나왔다. 문제의 조건을 잘 읽고 해당 범위에 맞는 값을 초기화 해주는 것 또한 중요하다
알고리즘 Solve 후 제가 생각한 Logic을 기록하는 개인 공부 블로그입니다.
내용 중 최적화가 가능한 부분등은 언제든지 댓글로 틀린 부분 및 피드백 주시면 공부 및 반영하겠습니다🧐
728x90
반응형
'Algorithm > Beakjoon' 카테고리의 다른 글
[백준/Baekjoon] 2206 벽 부수고 이동하기 C++ :: BFS (0) | 2023.08.24 |
---|---|
[백준/Baekjoon] 7570 줄세우기 C++ :: Dynamic Programming (0) | 2023.08.23 |
[백준/Baekjoon] 2003 수들의 합 2 C++ :: two pointers (0) | 2023.08.21 |
[백준/Baekjoon] 1806 부분합 C++ :: two pointers (0) | 2023.08.21 |
[백준/Baekjoon] 2573 빙산 C++ :: BFS (0) | 2023.08.20 |