일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 파이썬 강의
- 자살
- 2024
- python
- 다이나믹프로그래밍
- 강좌
- C++
- 파이썬 강좌
- mmdetection
- 파이썬
- dynamic programming
- BOJ
- 2021
- it
- dp
- 슬픔
- 라즈베리파이 모니터
- 알고리즘
- 공부
- 계획
- 철학
- 2020
- python 강좌
- 백준
- mmcv
- 강의
- 프로그래밍
- 인생
- python 강의
- 자작시
Archives
- Today
- Total
Stargazer
[백준] 2473번 : 세 용액 C++ (두 포인터) 본문
반응형
접근:
용액을 모두 탐색 하긴 해야 하기 때문에, 탐색방법 중에 두포인터를 이용하도록 하겠다.
(막상 두포인터인지는 모르겠다...)
전략:
입력 받은 값을 오름차순으로 정렬 후에, 작은 것부터 하나씩 기준을 정한다.
그 기준으로 오른쪽 배열에서 가장 왼쪽과 가장 오른쪽을 먼저 선택하고, 용액을 합쳤을 때 절댓값이 작게 되도록, 그 간격을 좁히는 방향으로 점점 이동한다. 만나면 다음 기준으로 옮기고 반복한다.
코드:
#include <iostream>
#include <algorithm>
#include <vector>
#include <cmath>
using namespace std;
int n; // 3~5000
long long sum = 3000000001;
vector<long long> input;
int main(){
cin >> n;
input.resize(n);
for(int i =0 ;i<n;i++){
cin >> input[i];
}
sort(input.begin(), input.end());
long long ans[3] ={0,};
for(int i=0;i<n-2;i++){
int left = i+1;
int right = n-1;
while(left < right){
long long temp = input[i] + input[left] + input[right];
if(sum > abs(temp)){
sum = abs(temp);
ans[0] = input[i];
ans[1] = input[left];
ans[2] = input[right];
}
if(temp < 0) left++;
else right--;
}
}
for(int i=0;i<3;i++){
cout << ans[i] << ' ';
}
cout << '\n';
return 0;
}
반응형
'Undergraudate basics(학부생 기초) > 자료구조, 알고리즘' 카테고리의 다른 글
[백준] 7579번 : 앱 c++ (DP) (0) | 2022.07.10 |
---|---|
[백준] 5430번 : AC (deque (or vector)) (0) | 2022.07.09 |
[백준] 2252번 : 줄 세우기 C++ (위상정렬) (0) | 2022.07.05 |
[백준] 2239번: 스도쿠 C++ (백트래킹) (0) | 2022.07.04 |
[백준] 1644번: 소수의 연속합 c++ 풀이 (에라토스테네스의 체, 투 포인터) (0) | 2022.06.25 |
Comments