[Atcoder]ABC081A – Placing Marbles[Ruby]

プログラミング

問題

すぬけ君は 1,2,3の番号がついた 3つのマスからなるマス目を持っています。 各マスには 0 か 1 が書かれており、マス iには siが書かれています。

すぬけ君は 1 が書かれたマスにビー玉を置きます。 ビー玉が置かれるマスがいくつあるか求めてください。

制約

s1,s2,s3は 1 あるいは 0

入出力例

入力 101 => 出力 2

入力 000 => 出力 0

自分の答え

array = []
array = gets.chomp.split("").map(&:to_i)
p array.count(1)

.split(“”) => これで一文字ずつ区切って配列に入れます。

.count(1) => 配列の中の1の数をカウントします。

ちなみに、array = [] の宣言はいりませんでした。.pushなどを使うときは必要なんですけど、必要な時と不要な時の違いがよくわかりません。

もっとよくする

p gets.chomp.split("").map(&:to_i).count(1)

わざわざ配列を用意しなくても、一行で書けてしまいます。メソッドを沢山つなげて書くとわかりづらくなりますけど。

array = [] の宣言が必要な時と不要な時

array = []など空の配列を用意しなくてはいけない時と、しなくていい時の違いがよくわかっていませんでした。配列を使うときは必ず用意しなくてはいけないと思っていたのですが、そうはないみたいです。

# OK
array = []
array = array.push(1)

# ERROR
array = array.push(1)

# OK
array = gets.chomp.split("").map(&:to_i)

要は、nilに対してメソッドを使おうとすると、エラーになります。3番目のコードは配列に対して直接メソッドを使ってないので、空の配列を用意しなくてもエラーにはなりません。当たり前のことですが、今更理解しました。

タイトルとURLをコピーしました