競技プログラミング

AtCoder Beginner Contest ABC308 A – New Scheme

画像クリックで問題に飛べます

AtCoder Beginner Contest ABC308 A – New Scheme

イントロダクション

この記事では、ある8個の整数が与えられたときに特定の条件を満たすかどうかを判定する問題に取り組みます。使用する言語はSwiftです。

問題の詳細説明

8つの整数(S1, S2, …, S8)が与えられ、次の3つの条件を全て満たすかどうかを判定する問題です。

  1. 数列(S1, S2, …, S8)が広義単調増加である。つまり、S1 ≤ S2 ≤ … ≤ S8である。
  2. S1, S2, …, S8が全て100以上675以下である。
  3. S1, S2, …, S8が全て25の倍数である。

これらの条件を全て満たす場合は”Yes”を、そうでない場合は”No”を出力します。

この問題では、与えられた数列が特定の条件を満たしているかどうかを判定します。このためには、数列の順序、値の範囲、および値が特定の数(この場合は25)の倍数であるかどうかを確認する必要があります。これらの操作は、比較演算子と剰余演算子を使って実行できます。

解答戦略

この問題は以下のステップで解くことができます:

  1. 8つの整数が単調増加しているかを確認する。
  2. 各整数が100以上675以下であることを確認する。
  3. 各整数が25の倍数であることを確認する。

これらの全ての条件が満たされている場合は”Yes”を、そうでない場合は”No”を出力します。

コードの解説

import Foundation
let inputs = readLine()!.split(separator: " ").map { Int($0)! }
let checkMonotone = inputs.sorted() == inputs
let checkRange = inputs.allSatisfy { $0 >= 100 && $0 <= 675 }
let checkDivisible = inputs.allSatisfy { $0 % 25 == 0 }
print((checkMonotone && checkRange && checkDivisible) ? "Yes" : "No")

上記のコードでは以下の手順で問題を解いています:

  1. let inputs = readLine()!.split(separator: " ").map { Int($0)! }:まず、標準入力から数列を取得します。入力はスペースで区切られた文字列として与えられるため、これをスペースで分割し、それぞれの要素を整数に変換します。
  2. let checkMonotone = inputs.sorted() == inputs:数列が広義単調増加であるかを確認します。数列をソートした結果が元の数列と一致する場合、数列は広義単調増加であると言えます。
  3. let checkRange = inputs.allSatisfy { $0 >= 100 && $0 <= 675 }:次に、全ての要素が100以上675以下であることを確認します。allSatisfy関数は、全ての要素が与えられた条件を満たす場合に真を返します。
  4. let checkDivisible = inputs.allSatisfy { $0 % 25 == 0 }:最後に、全ての要素が25の倍数であることを確認します。これもallSatisfy関数を用いています。
  5. print((checkMonotone && checkRange && checkDivisible) ? "Yes" : "No"):最終的に、全ての条件が真であれば”Yes”を、そうでなければ”No”を出力します。

コード全文

上記の解説を参考にして、以下にコード全体を示します。

import Foundation
let inputs = readLine()!.split(separator: " ").map { Int($0)! }
let checkMonotone = inputs.sorted() == inputs
let checkRange = inputs.allSatisfy { $0 >= 100 && $0 <= 675 }
let checkDivisible = inputs.allSatisfy { $0 % 25 == 0 }
print((checkMonotone && checkRange && checkDivisible) ? "Yes" : "No")

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です