// No.26 シャッフルゲーム // https://yukicoder.me/problems/no/26 package no01.yukicoder.no26 import java.util.Collections.swap /** インプットデータ */ data class InputData( /** ○印が付いているカップの位置 */ val firstIndex: Int, /** カップを入れ替えた回数 */ val count: Int, /** 入れ替えるカップの位置番号 */ val replacement: List> ) /** * エントリポイント */ fun main(args: Array) { val input = getStandardInput() println(shuffleGame(input)) } /** * ○印がついているカップの位置を返します。 */ fun shuffleGame(input: List): Int { val data = createInputData(input) val mark = mutableListOf(0, 0, 0) // 初期値の設定 for (i in mark.indices) { if (i == data.firstIndex - 1) { mark[i] = 1 } } // 入れ替え for (v in data.replacement) { val (x, y) = v swap(mark, x - 1, y - 1) } // 解答を探す for ((i, v) in mark.withIndex()) { if (v == 1) { return i + 1 } } // ここには来ない return 0 } /** * 標準入力から取得した文字列をInputDataに変換して返します。 */ fun createInputData(input: List): InputData { val firstIndex = input[0].toInt() val count = input[1].toInt() val replacement = mutableListOf>() for ((i, v) in input.withIndex()) { if (i == 0 || i == 1) { continue } val sp = v.split(" ") replacement.add(Pair(sp[0].toInt(), sp[1].toInt())) } return InputData(firstIndex, count, replacement) } /** * 標準入力から文字列を全て取得します。 */ fun getStandardInput(): List { val lines = mutableListOf() var line: String? line = readLine() while (line != null) { lines.add(line) line = readLine() } return lines }