結果
| 問題 |
No.29 パワーアップ
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2019-01-03 16:59:20 |
| 言語 | Kotlin (2.1.0) |
| 結果 |
AC
|
| 実行時間 | 360 ms / 5,000 ms |
| コード長 | 1,631 bytes |
| コンパイル時間 | 12,292 ms |
| コンパイル使用メモリ | 480,124 KB |
| 実行使用メモリ | 59,440 KB |
| 最終ジャッジ日時 | 2025-10-24 21:08:54 |
| 合計ジャッジ時間 | 18,812 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 22 |
ソースコード
// No.29 パワーアップ
// https://yukicoder.me/problems/no/29
package no01.yukicoder.no29
/** インプットデータ */
data class InputData(
/** 敵を倒す回数 */
val count: Int,
/** アイテムの番号 */
val itemNo: List<Int>
)
/**
* エントリポイント
*/
fun main(args: Array<String>) {
val input = getStandardInput()
println(powerUp(input))
}
/**
* パワーアップする最大回数を返します。
*/
fun powerUp(input: List<String>): Int {
val data = createInputData(input)
var level = 0
val group = data.itemNo
.groupBy { it }
.filter { it.value.size >= 2 }
// マップをキーと値のペアでループする
for ((_, v) in group) {
// 同じアイテム2つで1レベル
level += v.size / 2
}
// 違うアイテム4つで1レベル
return level + (data.itemNo.size - level * 2) / 4
}
/**
* 標準入力から取得した文字列をInputDataに変換して返します。
*/
fun createInputData(input: List<String>): InputData {
val count = input[0].toInt()
val getItemNo = mutableListOf<Int>()
for ((i, v) in input.withIndex()) {
if (i == 0) {
continue
}
getItemNo.addAll(v.split(" ").map { it.toInt() })
}
return InputData(count, getItemNo)
}
/**
* 標準入力から文字列を全て取得します。
*/
fun getStandardInput(): List<String> {
val lines = mutableListOf<String>()
var line: String?
line = readLine()
while (line != null) {
lines.add(line)
line = readLine()
}
return lines
}