diff --git "a/Algorithms/kotlin/Game_Theory-Mis\303\250re_Nim.kt" "b/Algorithms/kotlin/Game_Theory-Mis\303\250re_Nim.kt" new file mode 100644 index 0000000..d2983ad --- /dev/null +++ "b/Algorithms/kotlin/Game_Theory-Mis\303\250re_Nim.kt" @@ -0,0 +1,41 @@ +import java.util.* +import kotlin.collections.* +import kotlin.io.* +import kotlin.text.* + +fun misereNim(s: Array): String { + + // 1. 돌의 개수와 전체 pile의 개수가 같다면 모든 파일에 1개의 돌이 있는 것이다. + // 1-1. 따라서, 홀수면 Second가 승리한다. + s.reduce { acc, i -> acc + i }.let { + if (it == s.size) { + return when(it % 2) { + 0 -> "First" + else -> "Second" + } + } + } + + // 2. 일반적인 Nim game의 승자와 패자가 반대가 된다. 따라서 값이 0이면 Second가 승리한다. + s.reduce { acc, i -> acc xor i }.let { + return when(it) { + 0 -> "Second" + else -> "First" + } + } +} + +fun main(args: Array) { + val scan = Scanner(System.`in`) + + val t = scan.nextLine().trim().toInt() + + for (gItr in 1..t) { + val n = scan.nextLine().trim().toInt() + + val s = scan.nextLine().split(" ").map{ it.trim().toInt() }.toTypedArray() + + val result = misereNim(s) + println(result) + } +} \ No newline at end of file diff --git a/README.md b/README.md index a57f9c7..a98ead7 100644 --- a/README.md +++ b/README.md @@ -86,4 +86,5 @@ All about hackerrank - Game_Theory-A_Chessboard_Game.kt - Game_Theory-Game_of_Stones.kt - Game_Theory-Introduction_to_Nim_Game.kt +- Game_Theory-Misère_Nim.kt - Game_Theory-Tower_Breakers.kt \ No newline at end of file