競技プログラミング

ABC081B – Shift only

https://atcoder.jp/contests/abs/tasks/abc081_b

イントロダクション

今回は、AtCoderの問題、「数字の操作」に取り組んでみます。Swift言語を使用して、繰り返し処理と基本的な数学を使用してこの問題を解決します。

問題の詳細説明

黒板に N 個の正の整数 A1,…,AN が書かれています。すぬけ君は、黒板に書かれている整数がすべて偶数であるとき、次の操作を行うことができます。黒板に書かれている整数すべてを、2 で割ったものに置き換える。すぬけ君は最大で何回操作を行うことができるかを求めてください。

問題の要素解説

この問題は基本的な制御フローと整数の性質を理解することで解決できます。すべての整数が偶数である限り、すぬけ君は2で割り続けることができます。

解答戦略

  1. Swiftで配列内のすべての要素が特定の条件を満たすかどうかを確認する方法を学びます。
  2. 標準入力から整数の配列を読み込み、すべての整数が偶数である限り2で割り続けます。
  3. 操作が行われた回数をカウントして出力します。

コードの解説

まず、標準入力から整数の配列を読み込みます。次に、配列内のすべての整数が偶数である限り2で割り続け、その間に行った操作の数をカウントします。

コード全文

以下にコードの全文を示します:

import Foundation

let n = Int(readLine()!)!
var array = readLine()!.split(separator: ” “).map { Int($0)! }
var count = 0

while array.allSatisfy({ $0 % 2 == 0 }) {
array = array.map { $0 / 2 }
count += 1
}

print(count)

考察と最適化

この問題は比較的シンプルであり、今回のアプローチで効率的に解決できます。より複雑なケースでは、他のデータ構造を用いる可能性があります。

結論

今回の問題はSwiftの基本的な配列操作と制御フローを用いて解決しました。競技プログラミングは問題解決スキルを磨くのに非常に役立つと感じています。

コメントとフィードバックの募集

コメントやフィードバックをお待ちしております。お気軽にご意見をお寄せください。

COMMENT

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