技術ブログ

(技術系中心)基本自分用備忘録なので、あくまで参考程度でお願いします。

競技プログラミング day9

# ----------------------------------------------------------
# ■ 問題
# https://atcoder.jp/contests/abc117/tasks/abc117_b

# ■ 前提条件
#  一番長い辺が他の N − 1 辺の長さの合計よりも真に短い場合に限り、条件を満たす N角形が描ける。

# ■ 制約
# 3 <= N <= 10
# 1 <= Li <= 100

# ■ 流れ説明
# 1. N角形の入力値を受付(Nの値)
# 2. N回分、辺の長さをへんの長さを受付
# 3. 最長の辺の長さを算出
# 4. 最長の辺の長さが他の辺の長さの合計値より大きいかを確認
# 5. 4の結果がtrueの場合は"NO", flaseの場合は"true"をputs

# ■入力例
# 4
# 3 8 4 1
# ■ 出力例
# 8 ≥ 8 = 3 + 4 + 1なのでNOをputs

# ■ 工夫箇所

# ----------------------------------------------------------

# 1. N角形の入力値を受付(Nの値)
N = gets.chomp.to_i
# 2. N回分、辺の長さをへんの長さを受付
one_sides = gets.split.map(&:to_i)
# 3. 最長の辺の長さを算出
max_one_side = one_sides.max
one_sides.delete(max_one_side)
# 4. 最長の辺の長さが他の辺の長さの合計値より大きいかを確認
# 5. 4の結果がtrueの場合は"NO", flaseの場合は"true"をputs
puts max_one_side >= one_sides.inject(:+)? "No" : "Yes"