[문제]
https://www.acmicpc.net/problem/2467
[풀이]
투 포인터를 통해 풀었다.
입력되는 용액의 순서가 오름차순으로 정렬이 되어져 있는 상태이다.
그렇기 때문에
왼쪽에서 오른쪽 방향, 오른쪽에서 왼쪽으로 값을 찾아나가며, 0에 가까운 용액을 찾는다.
왼쪽을 가리키는 포인터 left, 오른쪽을 가리키는 포인터를 right라고 가정했을 경우에
용액 배열의 left위치와 right위치를 더한 값이 0보다 작다면, left를 1만큼 증가시키고
만약 크다면, right를 1만큼 감소시킨다.
[코드]
import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
import kotlin.math.abs
lateinit var br : BufferedReader
lateinit var bw : BufferedWriter
fun main()
{
br = BufferedReader(InputStreamReader(System.`in`))
bw = BufferedWriter(OutputStreamWriter(System.`out`))
var arr = arrayListOf<Long>()
var N = br.readLine().toInt()
for(value in br.readLine().split(" ").map{it.toLong()})
{
arr.add(value)
}
var left = 0
var right = N-1
var ansL = arr[left]
var ansR = arr[right]
while (left < right)
{
val tmp = arr[left] + arr[right]
if(abs(tmp) < abs(ansL + ansR)){
ansL = arr[left]
ansR = arr[right]
}
if(tmp < 0) left++
else right--
}
bw.write(ansL.toString() + " " + ansR.toString())
bw.flush()
bw.close()
}
'백준 > 투 포인터' 카테고리의 다른 글
백준 [1644] - kotlin (0) | 2023.06.27 |
---|---|
백준 [3646] kotlin (0) | 2023.01.30 |
백준 [2493] kotlin (0) | 2023.01.11 |
백준 [20437] kotlin (0) | 2023.01.10 |
백준 [2531] kotlin (0) | 2023.01.09 |