1
0

More than 1 year has passed since last update.

配列内の数字の合計(同じ数字を除く)

Last updated at Posted at 2022-07-16

はじめに

2回目の問題だったのに解けなかったので、学習の復習のために投稿します。
回りくどくなるかもしれませんが、できるだけ自分の言葉で説明できるようにするつもりです。

環境

ruby 2.6.5

問題

3つの数字が格納された配列が与えられています。
この配列に格納された数字の合計値を出したいのですが、条件として、配列内で重複している数字に関しては除くことが求められています。

def lone_sum(ary)
  # 処理を記述
end
# 呼び出し例
lone_sum([1, 2, 3])

考え方

以下の手順で考える

  1. 配列内で重複する数字があるかを確認する
  2. 重複数字を除いたユニークな配列を作る
  3. ユニークな配列に格納された数字を合計する 

1. 配列内で重複する数字があるかを確認する

配列に格納された数字をa, b, cとします。
まずはaの数字に対して、それぞれの配列内の数字を比較して同じかどうかを確かめます。
同じ場合にはカウントが上がるようにします。
例えば、aとa、aとb、aとcの数字を比較してカウントが上がるので、
カウントが2以上であれば重複する数字があるということになります。

def lone_sum(ary)
  ary.each do |num|
    count = 0
    ary.each do |n|
      if num == n
        count += 1
      end
    end
  end
 end

2. 重複数字を除いたユニークな配列を作る

まず、ユニークな配列を格納する変数を定義します。
uniq_ary = []
上記で確認した重複しない数字をこのユニークな配列に格納します。
uniq_ary << num

ここまでをまとめると、

def lone_sum(ary)
  uniq_ary = []
  ary.each do |num|
    count = 0
    ary.each do |n|
      if num == n
        count += 1
      end
    end
    if count < 2
      uniq_ary << num
    end
  end
end

3. ユニークな配列に格納された数字を合計する 

あとはuniq_aryの中身を合計するだけです。

sum = 0
uniq_ary.each do |uniq_num|
  sum += uniq_num
end

解答コード

def lone_sum(ary)
  uniq_ary = []
  ary.each do |num|
    count = 0
    ary.each do |n|
      if num == n
        count += 1
      end
    end
    if count < 2
      uniq_ary << num
    end
  end
  sum = 0
  uniq_ary.each do |uniq_num|
    sum += uniq_num
  end
  puts sum
end

終わりに

自己代入演算子の+=を=+と表記すると計算結果が変わりました。
なぜなのか現段階ではわからないので引き続き調べていきたいと思います。

追記(2022.7.20)

コメントでtallyメソッドやsumメソッドを使用するコードをご教授いただきました。
配列内の数字の合計(同じ数字を除く)再考察
こちらにもまとめてみました。

また、自己代入演算子の件についてもコメントいただいたので、そちらご参照ください!

ありがとうございます!!

1
0
4

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