Algorithm/백준
[백준 알고리즘] 2470번: 두 용액 (Python)
에릭 Kim
2023. 6. 6. 15:17
반응형
https://www.acmicpc.net/problem/2470
2470번: 두 용액
첫째 줄에는 전체 용액의 수 N이 입력된다. N은 2 이상 100,000 이하이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 수들은 모두 -1,000,000,000 이상 1,000,00
www.acmicpc.net
소스코드
풀이
★ 정렬된 리스트 a의 시작부분과 끝부분을 투포인터로 잡고, 그 값들을 더한 값이 0에 가까운 수들을 찾아줍니다.
lt가 rt보다 작을 때만 반복문을 도는 이유는 문제에서 n개의 용액들 전부 특성이 다르기에 중복되는 수가 없기 때문입니다.
★ 투포인터를 더한 절대값(mid값)이 ans보다 작으면 그 값이 0에 가장 가까운 값이 됩니다. 만약 mid 값이 0이 되면 바로 칮은 것이기에 반복문을 빠져나가고 값이 양수일 경우 mid값보다 큰 수들은 무조건 0에서 더 멀기 때문에 rt를 -1 해줍니다. 반대로 mid값이 음수가 나오는 경우 mid값보다 작은 값들은 전부 0에서 멀기 때문에 lt를 +1 해줍니다 !
★ 반복문을 돌면서 0에 가장 가까운 두 수를 찾아준 뒤 그 수를 오름차순 정렬하여 출력합니다
배운점
- 원소들 사이에 중복되는 값이 없는 경우, lt가 rt보다 작을 때까지만 반복문을 수행하면 된다. (보통 이분탐색 문제는 lt <= rt 까지 반복을 수행함)
- 이분탐색 문제라고 해서 무조건 mid값을 구해서 문제를 해결하는 것은 아니구나 ~~
반응형