Kotlin/Kotlin 알고리즘

백준 27522번 팀순위정하기 Kotlin 구현해보기

kimc 2023. 4. 23. 00:44
반응형

```

백준 27522번 팀순위정하기 Kotlin 구현해 보기

```

Kimc Kotlin Study

이번 글을 통해 배워갈 내용

  1. 백준 27522번 풀이

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

 

27522번: 카트라이더: 드리프트

레드팀은 2, 4, 5, 6등을 달성하여 총 $20$점을, 블루팀은 1, 3, 7, 8등을 달성하여 총 $19$점을 기록하였다.

www.acmicpc.net

 

 

백준 27522번 카트라이더: 드리프트는

난이도 브론즈 등급의 문제로서

 

선수들의 결괏값이 있을 때

주어진 조건에 따라서

팀순위를 정해주면 되는 문제입니다.

 


30분 정도 위에 링크를 방문하셔서 풀어보시고

안 풀리시는 경우에만 아래 해답을 봐주시면 감사하겠습니다.


순서정렬을 정석대로 숫자로 나눠서 정렬해 주는 게 좋지만

시간관계상 string비교를 하였습니다.

팀이 여러 개 있을경우를 대비해 확장성있게 total 값을 여러개 구해서 비교해 주는 게 좋지만

시간관계상 음수와 양수로 처리하였습니다.

 

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

fun getInput(): InputDto {
    var racingRecords: MutableList<RacingRecord> = ArrayList()
    for (i in 1..8) {
        val inputs = readln().split(" ")
        racingRecords.add(RacingRecord(time = inputs[0], team = inputs[1]))
    }
    return InputDto(
        racingRecords = racingRecords
    )
}

const val BLUE_TEAM = "B"
const val BLUE_TEAM_NAME = "Blue"
const val RED_TEAM_NAME = "Red"

data class RacingRecord(
    var time: String,
    var team: String
)

data class InputDto(
    var racingRecords: List<RacingRecord>
) {

    fun findWinningTeam(): String {
        val sortedRecords = racingRecords.sortedBy { it.time }
        val total = sortedRecords.foldIndexed(0) { idx, total, it ->
            val score = findScore(idx + 1)
            if (it.team == BLUE_TEAM) {
                total - score
            } else {
                total + score
            }
        }
        return if (total < 0) {
            return BLUE_TEAM_NAME
        } else {
            if (total == 0) {
                if (sortedRecords[0].team == BLUE_TEAM) {
                    return BLUE_TEAM_NAME
                }
            }
            return RED_TEAM_NAME
        }
    }

    private fun findScore(idx: Int): Int {
        return when (idx) {
            1 -> 10
            2 -> 8
            3 -> 6
            4 -> 5
            5 -> 4
            6 -> 3
            7 -> 2
            8 -> 1
            else -> 0
        }
    }
}

fun solution(dto: InputDto): String {
    return dto.findWinningTeam()
}


// https://codemasterkimc.tistory.com/

 

읽어주셔서 감사합니다

 

무엇인가 얻어가셨기를 바라며

 

오늘도 즐거운 코딩 하시길 바랍니다 ~ :)

 


 

반응형