このページについて

このページは、paiza ラーニング内に開設されているコンテンツ「レベルアップ問題集」で取り扱われているプログラミング課題について、独自の見解を述べたものです。

見解については、paizaラーニングの規約に基づき、許可されている範囲でのみ公開していますが、その内容については paiza とは一切関係なく、また paiza の立場を反映したものではありませんのでご注意ください。

挑戦する課題

レベルアップ問題集戦セットから「【競技8】お一人様一点限り (paizaランク C 相当)」を取り上げます。

以下は、問題公開 Web ページからの引用です。

問題

この問題は、弊社営業社員が競技プログラミングに挑戦したものです。

あるスーパーでは、お一人様一点限りでセール価格の商品を販売することにしました。

そこで、一人のお客さんが2回以上その商品を買えないように、お客さんの名前をチェックすることにしました。

お客さんの名前が来た順番で入力されるので、そのお客さんが初めて来たのかどうかを判定し、結果を出力してください。

入力される値

入力は以下のフォーマットで与えられます

  • 入力される文字列数n
  • c_1, c_2, …, c_n は大文字、小文字のアルファベットからなる文字列
  • 入力はn + 1行となり、末尾に改行を一つ含みます。

期待する出力

  • 初めて来たお客さんには YES
  • 一度来たお客さんには NO

を出力してください。ただし、同じ名前のお客さんはいないものとします。

考え方

客の名前は String で与えられるため、 String つまり客の名前をキーとした Dictionary で来店情報を作ることにする。

配列に保存した客の名前をキーとして Dictionary からデータを引っ張ってくるが、キーが未登録の場合、Swift の Dictionarynil を返すため、それをオプショナルバインディングを使って判断し、 "YES" ないし "NO" を出力する。

初めての客の場合には、客の名前に相当するキーに 1 を代入することで、既に来店した客であることを記録する。

解答例