반응형
```
백준 2470번 두 용액 Kotlin 구현해 보기
```
이번 글을 통해 배워갈 내용
- 백준 2470번 풀이
https://www.acmicpc.net/problem/2470
백준 2470번 두용액은
난이도 골드 등급의 문제로서
1부터 10억까지의 양의 정수로 표현되는 산성 용액
-1부터 -10억까지의 음의 정수로 표현되는 알칼리 용액
들이 주어지고
주어진 용액들 중에 두 개의 용액을 섞어서 0에 가까운 값을 만들어주면 되는 문제입니다.
30분 정도 위에 링크를 방문하셔서 풀어보시고
안 풀리시는 경우에만 아래 해답을 봐주시면 감사하겠습니다.
이분탐색을 해서
0에 가까운 값을
NlogN정도의 시간복잡도로 찾았습니다
import kotlin.math.abs
fun main() {
val inputDto = getInput()
print(solution(inputDto))
}
fun getInput(): InputDto {
val size = readln().toInt()
val liquids = readln().split(" ").map { k -> k.toInt() }.toIntArray()
return InputDto(liquids)
}
data class InputDto(
var liquids: IntArray
)
fun solution(dto: InputDto): String {
return findNeutralAcidAndAlkali(dto.liquids)
}
fun findNeutralAcidAndAlkali(liquids: IntArray): String {
liquids.sort()
var left = 0
var right = liquids.size - 1
var al = liquids[left]
var ar = liquids[right]
var acidity = al + ar
while (left < right) {
val curAcidity = liquids[left] + liquids[right]
if (abs(acidity) > abs(curAcidity)) {
acidity = curAcidity
al = liquids[left]
ar = liquids[right]
}
if (curAcidity <= 0) {
left++
} else {
right--
}
}
return "$al $ar"
}
// https://codemasterkimc.tistory.com/
테스트
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Test
internal class MainKtTest {
@Test
fun test() {
assertEquals(
"-99 98",
solution(
InputDto(intArrayOf(-2, 4, -99, -1, 98))
)
)
}
}
읽어주셔서 감사합니다
무엇인가 얻어가셨기를 바라며
오늘도 즐거운 코딩 하시길 바랍니다 ~ :)
반응형
'Kotlin > Kotlin 알고리즘' 카테고리의 다른 글
백준 27908번 Kalendar Kotlin 구현해보기 (0) | 2023.04.22 |
---|---|
백준 2110번 공유기 설치 Kotlin 구현해보기 (0) | 2023.03.17 |
백준 3449번 해밍 거리 Kotlin 구현해보기 (0) | 2023.03.14 |
백준 3060번 욕심쟁이 돼지 Kotlin 구현해보기 (0) | 2023.03.13 |
백준 3059번 등장하지 않는 문자의 합 Kotlin 구현해보기 (0) | 2023.03.13 |