競技プログラミング

ABC085B – Kagami Mochi

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

イントロダクション

今回は、AtCoderの問題、「鏡餅の最大段数」に取り組んでみます。Swift言語を使用して、配列の操作と基本的なループ処理を利用してこの問題を解決します。

問題の詳細説明

ダックスフンドのルンルンはN枚の円形の餅を持っていて、そのうちi枚目の餅の直径はdiセンチメートルです。これらの餅のうち一部または全部を使って鏡餅を作るとき、最大で何段重ねの鏡餅を作ることができるでしょうか。ただし、鏡餅とは、X枚の円形の餅を縦に積み重ねたもので、どの餅もその真下の餅より直径が小さいもののことを指します。

問題の要素解説

この問題は、配列の操作と基本的なループ処理の理解に基づいています。持っている餅の中から、重複しないものを選び出し、その数が鏡餅の最大の段数になります。

解答戦略

Swiftで重複しない要素の数を計算する方法を学びます。

  1. 標準入力からNと餅の直径diを読み込みます。
  2. 重複しない要素の数を求めます。
  3. その数を出力します。

コードの解説

まず、標準入力からNと餅の直径diを読み込みます。次に、持っている餅の中から重複しない要素(直径)の数を求めます。これが鏡餅の最大の段数になります。

コード全文

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

import Foundation

let N = Int(readLine()!)!
let diameters = (0..<N).map { _ in Int(readLine()!)! }

let uniqueDiameters = Set(diameters)
print(uniqueDiameters.count)

考察と最適化

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

結論

今回の問題はSwiftの配列操作とSet型の特性を用いて解決しました。競技プログラミングは問題解決スキルを磨くのに非常に役立つと感じています。

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

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

COMMENT

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