```
백준 2295번 세 수의 합 Kotlin 구현해보기
```

이번 글을 통해 배워갈 내용
- 백준 2295번 풀이
https://www.acmicpc.net/problem/2295
2295번: 세 수의 합
우리가 x번째 수, y번째 수, z번째 수를 더해서 k번째 수를 만들었다라고 하자. 위의 예제에서 2+3+5=10의 경우는 x, y, z, k가 차례로 1, 2, 3, 4가 되며, 최적해의 경우는 2, 3, 4, 5가 된다. k번째 수가 최
www.acmicpc.net
백준 2295번 세 수의 합은
난이도 골드 등급의 문제로서
5개 이상 1000개 이하의 200,000,000 보다 작은 정수를 가진 집합이 주어질 때
집합 내부의 각기 다른 원소 x, y, z를 더해서
집합 내부의 수가 될 수 있는
가장 큰 수를 구해주면 되는 문제입니다.
30분 정도 위에 링크를 방문하셔서 풀어보시고
안 풀리시는 경우에만 아래 해답을 봐주시면 감사하겠습니다.
단순하게 비교하면 O(n^3) 이기 때문에 복잡도가 너무 높습니다
따라서
x + y + z = u 에서
x + y = u - z로 찾고
x + y는 미리 hashmap이나 List로 구해서 아래와 같이 비교한 다음
twoNums.binarySearch(oneNums[j] - oneNums[i]) >= 0
비교된 값 중 최대 값을 찾아주면 됩니다.
전체 코드는 아래와 같습니다
import kotlin.math.max
fun main(args: Array<String>) {
// 입력
val size = readln().toInt()
val oneNums = ArrayList<Int>()
val twoNums = ArrayList<Int>()
for (i in 0 until size) {
oneNums.add(readln().toInt())
}
oneNums.sort()
for (i in 0 until size) {
for (j in i until size) {
twoNums.add(oneNums[i] + oneNums[j])
}
}
twoNums.sort()
// 출력
print(findSumOfThree(size, oneNums, twoNums))
}
fun findSumOfThree(size: Int, oneNums: ArrayList<Int>, twoNums: ArrayList<Int>): Int {
var ans = 0
for (i in 0 until size) {
for (j in i + 1 until size) {
if (twoNums.binarySearch(oneNums[j] - oneNums[i]) >= 0) {
ans = max(ans, oneNums[j])
}
}
}
return ans
}
// https://codemasterkimc.tistory.com/
읽어주셔서 감사합니다
무엇인가 얻어가셨기를 바라며
오늘도 즐거운 코딩 하시길 바랍니다 ~ :)
728x90
'Kotlin > Kotlin 알고리즘' 카테고리의 다른 글
| 백준 13706번 제곱근 Kotlin 구현해보기 (0) | 2022.09.18 |
|---|---|
| 백준 14910번 오르막 Kotlin 구현해보기 (0) | 2022.09.17 |
| 백준 24751번 Betting Kotlin 구현해보기 (0) | 2022.09.15 |
| 백준 10815번 숫자 카드 Kotlin 구현해보기 (0) | 2022.09.08 |
| 백준 16199번 나이 계산하기 Kotlin 구현해보기 (2) | 2022.09.06 |