Kotlin/Kotlin 알고리즘

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

kimc 2023. 3. 11. 23:25

```

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

```

Kimc Kotlin Study

이번 글을 통해 배워갈 내용

  1. 백준 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