当記事ではAtCoder、ABCのB問題ならびにC問題(時々D問題も)のKotlinでの解法を超初心者向けに詳細に解説します。
B - Tournament Result
やりたいこと
表の全ての要素について以下の処理を行おう。
i行目j列目の要素(Aij)値によってj行目i列目の要素(Aji)の値が以下のようになっているかどうかをチェックしよう。(ただしj==iの場合は処理対象外)
Aijの値 | Ajiの値 |
---|---|
'W' | 'L' |
'L' | 'W' |
'D' | 'D' |
入力値の取得
// 入力値の取得
val n = readLine()!!.toInt()
val result = (1..n).map { readLine()!! }
サンプルコード
main.kt
fun main(args: Array<String>) {
// 答えの出力
println(if (getAns()) "correct" else "incorrect")
}
fun getAns(): Boolean {
// 入力値の取得
val n = readLine()!!.toInt()
val result = (1..n).map { readLine()!! }
for (i in (result.indices)) {
for (j in (result[i].indices)) {
// i == j は処理の対象外
if (i == j) {
continue
}
// 場合分け
when (result[i][j]) {
'D' -> {
if (result[j][i] != 'D') {
return false
}
}
'W' -> {
if (result[j][i] != 'L') {
return false
}
}
'L' -> {
if (result[j][i] != 'W') {
return false
}
}
}
}
}
return true
}
C - NewFolder(1)
やりたいこと
文字列をキー、整数を値とするMutableMapを作成し、文字列を受け取るたびに以下の処理を行おう。
最終的な出力は最大2万行になるため、StringBuilderに出力値を入れて、最終的にまとめて出力しよう。
- MutableMapに入力された文字列をキーとする要素がない場合
- 文字列をStringBuilderに追加
- MutableMapに文字列をキーとし、値1を追加
- MutableMapに入力された文字列をキーとする要素がある場合
- 文字列 + "(" + 要素の値 + ")" をStringBuilderに追加
- MutableMapの文字列をキーとした値を、要素数+1に更新
入力値の取得
val n = readLine()!!.toInt()
repeat(n) {
val s = readLine()!!
}
サンプルコード
main.kt
fun main(args: Array<String>) {
// 入力値の取得
val n = readLine()!!.toInt()
// 文字列が何個入力されたかを保持するMap
val cnt = mutableMapOf<String, Int>()
// 最終的に答えを出力するStringBuilder
val ans = java.lang.StringBuilder()
repeat(n) {
// 入力された文字列を取得
val s = readLine()!!
cnt[s]?.also {
ans.appendln("$s($it)")
} ?: run {
ans.appendln(s)
}
// Mapの更新
cnt[s] = (cnt[s] ?: 0) + 1
}
// 答えの出力
print(ans.toString())
}