Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
Tags
- 이노베이션아카데미
- generics
- abstract
- la-piscine
- classloader
- 제네릭스
- HeapArea
- SRP
- 상속관계
- 42seoul
- 참조변수
- 도커네트워크
- java
- MethodArea
- 운영체제
- 바이트코드
- JVM
- javac
- pg_hba.conf
- StackArea
- 자바컴파일러
- 42서울
- 포함관계
- 라피신
- Compiler
- jdk
- Operating System
- JIT
- LSP
- RDD
Archives
- Today
- Total
while(1) 작심삼일();
[백준 2470번] 두 용액 본문
https://www.acmicpc.net/problem/2470
2470번: 두 용액
첫째 줄에는 전체 용액의 수 N이 입력된다. N은 2 이상 100,000 이하이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 수들은 모두 -1,000,000,000 이상 1,000,00
www.acmicpc.net
풀이)
투포인터 알고리즘을 이용하여 좌우합의 절댓값비교를 하며 조건에 맞는 경우 저장해두고, 범위를 좁혀가면 된다. 이미 0을 만들어버리게 되면 바로 break문을 통해 빠져나오게 구현하였다.
#include <iostream>
#include <algorithm>
using namespace std;
int N, sum = 0, ans = 2e9 + 1, ans_left, ans_right;
int arr[100001];
int main()
{
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin >> N;
for (int i = 0; i < N; i++)
cin >> arr[i];
sort(arr, arr + N);
int left = 0, right = N - 1;
while (left < right)
{
sum = arr[left] + arr[right];
if (abs(sum) < ans)
{
ans = abs(sum);
ans_left = left;
ans_right = right;
}
if (sum == 0)
break ;
if (sum > 0)
right--;
else if (sum < 0)
left++;
}
cout << arr[ans_left] << " " << arr[ans_right] << "\n";
return (0);
}
제 코드는 절대 완벽하지 않습니다
더 좋은 풀이방법 혹은 코드에 관한 질문이 있으시면 언제든 댓글주세요!
'CS > baekjoon' 카테고리의 다른 글
[백준 2559번] 수열 (0) | 2021.04.19 |
---|---|
[백준 1874번] 스택 수열 (0) | 2021.04.19 |
[백준 7569번] 토마토 (0) | 2021.04.17 |
[백준 1613번] 역사 (0) | 2021.04.16 |
[백준 1516번] 게임 개발 (0) | 2021.04.14 |
Comments