0
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で解こう - ABC269

Posted at

当記事ではAtCoder、ABCのB問題ならびにC問題(時々D問題も)のKotlinでの解法を超初心者向けに詳細に解説します。

B - Rectangle Detection

やりたいこと

入力された文字列のリストの内、'#'で構成される長方形のエリアの上辺、下辺、左辺、右辺を求めよう。
List.indexOfFirstList.indexOfLast で上辺と下辺を求めよう。
そして'#'を含む行(文字列)に対して、String.indexOfString.lastIndexOf で左辺と右辺を求めることができる。
これらで得た値は0始まりのインデックス値なので、答えとして出力する場合は1を加えよう。

入力値の取得

    // 入力値の取得
    val s = (1..10).map { readLine()!! }

サンプルコード

main.kt
fun main(args: Array<String>) {
    // 入力値の取得
    val s = (1..10).map { readLine()!! }
    // 上辺を求める
    val a = s.indexOfFirst { it.contains('#') } + 1
    // 下辺を求める
    val b = s.indexOfLast { it.contains('#') } + 1
    // 左辺を求める
    val c = s[a - 1].indexOf('#') + 1
    // 右辺を求める
    val d = s[a - 1].lastIndexOf('#') + 1

    // 答えの出力
    println("$a $b")
    println("$c $d")
}

C - Submask

やりたいこと

入力値を2進数表記にし各桁ごとに処理を行う。
該当桁が
0の場合、xの同じ桁は0
1の場合、xの同じ桁は1または0
1の数は最大15という制約があるため、全ての組み合わせは最大32768通りとなる。
各桁の処理をメソッド化し、全ての組み合わせを網羅するよう再帰処理を行おう。
処理の順番を上位の桁→回の桁、かつxの桁が0になる場合→1になる場合の順で処理を行うことにより、ソート不要となる。

入力値の取得

    // 入力値の取得
    n = readLine()!!.toLong()

サンプルコード

main.kt
fun main(args: Array<String>) {
    // 入力値の取得
    n = readLine()!!.toLong()
    getAns(0, 63)
}

var n = 0L

// 各桁に対する処理
fun getAns(subTotal: Long, index: Int) {
    if (index < 0) {
        // 最後の桁まで処理し終えたので、数字を出力
        println(subTotal)
        return
    }
    // 該当の桁が0の場合
    getAns(subTotal, index - 1)
    val num = 1L shl index
    if (n and num != 0L) {
        // nの該当の桁が1の場合の処理
        getAns(subTotal + num, index - 1)
    }
}
0
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
0
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?