あなたは友達に勧められて、とあるカードゲームを始めることにしました。
そのカードゲームには、カード番号 1 から M までの M 種類のカードがあります。
あなたは完璧主義者なので、どうしても M 種類全てのカードが欲しくなり、カードを N 枚買いました。
さあ、買ってきた N 枚のカードを順番に開けていきましょう!
開けたカードのカード番号が順番に与えられるので、M 種類そろったのは何枚開けたときかを出力するプログラムを書いて下さい。
以下は入力例 1 を図示したものです。
##解き方のポイント
ポイントは「カードの種類が揃った」という条件をどのようにして表現するか。
今回は配列にあらかじめ、総種類の枚数を入れておき、cardsとcardの番号を照らし合わせて同じ番号があったら配列からデリートしていく。
if文で配列の中身が無くなった時にブロック変数の「i + 1」で数を出力し、exitで繰り返し処理をストップさせる。
また、「unlucky」の出力は、真偽値を用いて行う。
##コード例
N, M = gets.chomp.split(' ').map(&:to_i)
cards = Array.new
flag = false
M.times do |i|
cards << (i + 1)
end
N.times do |i|
card = gets.to_i
cards.delete(card)
if cards == []
puts i + 1
flag = true
exit
end
end
puts 'unlucky' if flag == false