[백준] 다트 (2756)(kotlin)

문제 설명

백준 2756번 문제 링크

입력 및 출력

» 입력

첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한 줄에 12개의 실수(double-precision 값)가 있다. 각 쌍은 중심과 다트의 거리이고, x, y거리 순서이고 단위는 cm이다. 처음 3개의 수는 첫 번째 플레이어가 던진 다트이고, 다음 3개는 두 번째 플레이어가 던진 것이다. (-20.0 ≤ X,Y ≤ 20.0)

» 출력

  • 각 테스트 케이스에 대해서, 게임을 이긴 사람이 있다면 다음과 같은 형식으로 출력한다. SCORE: N to M, PLAYER P WINS. 만약, 비겼다면 SCORE: N to M, TIE. 를 출력한다. N은 첫 번째 플레이어의 점수, M은 두 번째 플레이어의 점수이고, P는 게임을 승리한 사람의 번호 1 또는 2이다. 모든 값은 음이 아닌 정수이다.

예제 입출력(테스트케이스)

입력 출력
2
-9 0 0 -4.5 -2 2 9 0 0 4.5 2 -2
-19.0 19.0 0 0 0 0 3 3 6 6 12 12
SCORE: 240 to 240, TIE.
SCORE: 200 to 140, PLAYER 1 WINS.

문제 풀이1

import kotlin.math.abs
import kotlin.math.sqrt

fun main(args: Array<String>) = with(System.`in`.bufferedReader()) {
    repeat(readLine().toInt()) {
        var player1 = 0
        var player2 = 0
        val scores = readLine().split(" ").map { it.toDouble() }
        for (i in 0 until 2) {
            for (j in i * 6 until (i + 1) * 6 step 2) {
                val x = abs(scores[j])
                val y = abs(scores[j + 1])
                val r = sqrt(x * x + y * y)
                if (i % 2 == 0) {
                    //player1
                    player1 += score(r)
                } else {
                    //player2
                    player2 += score(r)
                }
            }
        }

        println(
            when {
                player1 > player2 -> "SCORE: $player1 to $player2, PLAYER 1 WINS."
                player1 < player2 -> "SCORE: $player1 to $player2, PLAYER 2 WINS."
                else -> "SCORE: $player1 to $player2, TIE."
            }
        )
    }
}

fun score(dart: Double): Int {
    return when  {
        dart in 0.0..3.0 -> 100
        3.0 < dart && 6.0 >= dart -> 80
        6.0 < dart && 9.0 >= dart -> 60
        9.0 < dart && 12.0 >= dart -> 40
        12.0 < dart && 15.0 >= dart -> 20
        else -> 0
    }
}