[백준] 다트 (2756)(kotlin)
문제 설명
입력 및 출력
» 입력
첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한 줄에 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
}
}