백준 3060번 욕심 돼지 코틀린 구현

  • by

“”

백준 3060 탐욕스러운 돼지 코틀린 구현

“”


Kimc Kotlin Study

이 기사에서 배우는 내용

  1. 백준 3060번 욕심 돼지잔디

https://www.acmicpc.net/problem/3060

3060: 탐욕스러운 돼지

입력은 T개의 테스트 데이터로 구성됩니다.

입력의 첫 번째 행에는 입력 데이터의 수를 나타내는 정수 T가 주어진다.

각 테스트 데이터는 두 줄로 구성되며 첫 번째 행에는 하루에 전달됩니다.

www.acmicpc.net

백준 3060번 욕심 돼지

난이도 청동 등급 문제로

6마리의 돼지가 입방체에 그려진 원형이며,

매일 사료를 D단위만 주면

각 돼지가 첫날에 먹는 사료 단위가 주어집니다.

다음날 각 돼지의 좌우 반대측의 합계만 추가로 각 돼지가 더 먹는다면

돼지의 욕심을 더 이상 채울 수 없는 날을 구하면 됩니다.


30분 정도 위의 링크를 방문하여 풀어주세요.

풀 수없는 경우에만 아래의 답변을 보시면 감사하겠습니다.


각 돼지의 추가 사료는

돼지 전체의 추가 사료를 생각하면

매일 4배입니다.

그러므로

사료의 합계에 4의 배수를 곱하여 찾으십시오.

fun main() {
    val inputDto = getInput()
    print(solution(inputDto))
}

fun getInput(): InputDto {
    val testCaseCount = readln().toInt()
    val farms = emptyList<Farm>().toMutableList()
    for (i in 1..testCaseCount) {
        val dailyFeed = readln().toInt()
        val pigFeeds = readln().split(" ").map { m -> m.toInt() }
        farms.add(Farm(dailyFeed, pigFeeds))
    }
    return InputDto(farms)
}

data class InputDto(
    val farms: List<Farm>
)

data class Farm(
    val dailyFeed: Int,
    val pigFeeds: List<Int>
)

fun solution(dto: InputDto): String {
    return dto.farms.map { farm -> findDoomsDay(farm) }.joinToString("\n")
}

fun findDoomsDay(farm: Farm): Int {
    var day = 1
    var sum = farm.pigFeeds.sum()

    while (sum <= farm.dailyFeed) {
        day++
        sum *= 4
    }

    return day
}

// https://codemasterkimc./

테스트

import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Test

internal class MainKtTest {

    @Test
    fun test() {
        assertEquals(
            "2\n1",
            solution(
                InputDto(
                    listOf(
                        Farm(21, listOf(1, 2, 3, 4, 5, 6)),
                        Farm(21, listOf(1, 2, 3, 4, 5, 7))
                    )
                )
            )
        )
    }
}

읽어 주셔서 감사합니다.

뭔가 얻을 수 있기를 바랍니다.

오늘도 재미있는 코딩을 해주세요 ~ 🙂