はじめに
AtCoder に登録したら次にやること ~ これだけ解けば十分闘える!過去問精選 10 問 ~ - Qiita
こちらの記事を参考に初心者がAt corderに挑戦します。
目的としては、就職活動でのコーディングテスト対策です。
毎日1問を目標としてコツコツやってきます
わからないことは調べる精神です。ちょっとでもわからないなぁ、と思ったことは調べて解説と参考文献を載せますので、同じ内容でわからない人がいれば参考にししてください
問題 ABC081A - Placing Marbles
1,2,3の番号がついた3つのマスがあり、それぞれ0か1が書かれている。
マスiにはs_iが書かれている。1が書かれたマスにビー玉を置く。ビー玉が置かれるマスがいくつあるか求めよ。
制約
s1,s2,s3s1,s2,s3は1あるいは0
入力 出力
s1s2s3
出力
答えを出力せよ
入力例
101
出力例
2
回答
array = []
array = gets.chomp.split("").map(&:to_i)
p array.count(1)
解説
まずarrayを宣言して、その後入力を受ける。
今回は一文字ずつ代入するのでsplit("")とする。
mapメソッドを使って、配列として代入する
配列.map{|変数|変数に対する処理}
一つ一つの要素に対して処理をしてから代入してくれる。今回は変数ではないので&にしておくのかな?
参考文献より一文で書ける様子
p gets.chomp.split("").map(&:to_i).count(1)
かっこいい、、
感想
配列の場合、どのように入力すればいいのかわからなかった。今回は配列を宣言してから=gets.chomp~としてみた。
配列に代入するとき、必ずしも事前に用意する必要はないみたい。
array = gets.chomp.split("").map(&:to_i)
宣言しなくても、いきなり配列として代入することができる。
array = array.push(1)
これはNG。nilに対してメソッドは使えない。
array = []
array = array.push(1)
これだとOK。
配列に直接メソッドを使う場合は前もって定義しておく必要がある。