728x90
문제
https://www.acmicpc.net/problem/2470
해설
이분 탐색을 이용하여 해결할 수 있는 문제이다.
용액들의 특성값을 배열 혹은 리스트에 넣고, 이를 정렬시킨다.
이제 두 개의 포인터를 잡는다. 한개는 배열의 시작 위치인 0, 또 하나는 배열의 마지막 위치인 n - 1로 잡는다.
list[start] + list[end]가 0보다 작다면, 두 수의 값이 0에 더 가까워질 수 있도록 start를 증가시켜준다.
0보다 크다면 end를 줄여 0에 가깝게 만들어준다.
이를 통해 0에 가장 가까운 값을 구해주면 된다.
코드
import java.util.*
import kotlin.collections.ArrayList
import kotlin.math.abs
fun main() = with(System.`in`.bufferedReader()) {
val n = readLine().toInt()
val list = ArrayList<Int>(n)
val st = StringTokenizer(readLine())
repeat(n) { list.add(st.nextToken().toInt()) }
list.sort()
var start = 0
var end = n-1
var min = Integer.MAX_VALUE
var a = 0
var b = 0
while(start < end) {
val sum = list[start] + list[end]
if(abs(sum) < min) {
min = abs(sum)
a = list[start]
b = list[end]
if(sum == 0) break
}
if(sum < 0) start++
else end--
}
println("$a $b")
}
728x90
'PS(Problem Solving) > BOJ' 카테고리의 다른 글
[백준/BOJ] 1082번: 해킹 (0) | 2022.08.21 |
---|---|
[백준/BOJ] 1967번: 트리의 지름 (0) | 2022.08.20 |
[백준/BOJ] 3055번: 탈출 (0) | 2022.08.18 |
[백준/BOJ] 12893번: 적의 적 (0) | 2022.08.17 |
[백준/BOJ] 1707번: 이분 그래프 (0) | 2022.08.16 |
댓글