1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

AtCoder B,C問題をKotlinで解こう - ABC261

Posted at

当記事では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())
}
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?