```
백준 7795번 먹을 것인가 먹힐 것인가 Kotlin 구현해 보기
```

이번 글을 통해 배워갈 내용
- 백준 7795번 풀이
https://www.acmicpc.net/problem/7795
7795번: 먹을 것인가 먹힐 것인가
심해에는 두 종류의 생명체 A와 B가 존재한다. A는 B를 먹는다. A는 자기보다 크기가 작은 먹이만 먹을 수 있다. 예를 들어, A의 크기가 {8, 1, 7, 3, 1}이고, B의 크기가 {3, 6, 1}인 경우에 A가 B를 먹을
www.acmicpc.net
백준 7795번 먹을 것인가 먹힐 것인가는
난이도 실버 등급의 문제로서
두 종류의 수그룹 A와 B가 주어질 때
A에 주어진 각각의 수보다 작은 B그룹의 수를 세주면 되는 문제입니다.
30분 정도 위에 링크를 방문하셔서 풀어보시고
안 풀리시는 경우에만 아래 해답을 봐주시면 감사하겠습니다.
각각의 수에 대해서
이진탐색을 돌렸습니다.
fun main() {
val inputDto = getInput()
print(solution(inputDto))
}
fun getInput(): InputDto {
val testCaseCnt = readln().toInt()
val dtos = emptyList<TestCaseDto>().toMutableList()
for (i in 1..testCaseCnt) {
val size = readln()
val aCreatures = readln().split(" ").map { k -> k.toInt() }.toList()
val bCreatures = readln().split(" ").map { k -> k.toInt() }.toList()
dtos.add(TestCaseDto(aCreatures, bCreatures))
}
return InputDto(dtos)
}
data class InputDto(
val testcaseDtos: List<TestCaseDto>
)
data class TestCaseDto(
val aCreatures: List<Int>,
val bCreatures: List<Int>
)
fun executeTestcase(dto: TestCaseDto): Int {
val aList = dto.aCreatures.sorted()
val bList = dto.bCreatures.sorted()
var ans = 0
for (i in aList.indices) {
ans += binarySearch(bList, aList, i)
}
return ans
}
private fun binarySearch(bList: List<Int>, aList: List<Int>, i: Int): Int {
var left = 0
var right: Int = bList.size
while (left + 1 < right) {
val mid = (left + right) / 2
if (aList[i] > bList[mid]) left = mid else right = mid
}
var ans = left
if (aList[i] > bList[left]) ans++
return ans
}
fun solution(dto: InputDto): String {
return dto.testcaseDtos.joinToString("\n") { executeTestcase(it).toString() }
}
// https://codemasterkimc.tistory.com/
테스트
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Test
internal class MainKtTest {
@Test
fun test() {
assertEquals(
"7\n1",
solution(
InputDto(
listOf(
TestCaseDto(
listOf(8, 1, 7, 3, 1),
listOf(3, 6, 1)
),
TestCaseDto(
listOf(2, 13, 7),
listOf(103, 11, 290, 215)
),
)
)
)
)
}
}
읽어주셔서 감사합니다
무엇인가 얻어가셨기를 바라며
오늘도 즐거운 코딩 하시길 바랍니다 ~ :)
728x90
'Kotlin > Kotlin 알고리즘' 카테고리의 다른 글
| 백준 3059번 등장하지 않는 문자의 합 Kotlin 구현해보기 (0) | 2023.03.13 |
|---|---|
| 백준 20920번 영단어 암기는 괴로워 Kotlin 구현해보기 (0) | 2023.03.12 |
| 백준 20291번 파일정리 Kotlin 구현해보기 (0) | 2023.03.11 |
| 백준 11652번 카드 Kotlin 구현해보기 (0) | 2023.03.11 |
| 백준 1015번 수열 정렬 Kotlin 구현해보기 (0) | 2023.03.11 |