このページについて
このページは、paiza ラーニング内に開設されているコンテンツ「レベルアップ問題集」で取り扱われているプログラミング課題について、独自の見解を述べたものです。
見解については、paizaラーニングの規約に基づき、許可されている範囲でのみ公開していますが、その内容については paiza とは一切関係なく、また paiza の立場を反映したものではありませんのでご注意ください。
挑戦する課題
レベルアップ問題集のスキルチェック過去問題セットから「検索履歴 (paizaランク C 相当)」を取り上げます。
以下は、問題公開 Web ページからの引用です。
問題
あなたが利用しているブラウザでは検索ワードの履歴を見ることができません。あなたは検索ワードの履歴を見られないのは不便だと思ったので、検索ワードの履歴を見る機能を自分でつくることにしました。
検索ワードの履歴とは次のようにつくられます。
- 検索ワード W が以前に入力されたことがある場合:
- 履歴中の W を削除する。
- 履歴の先頭に W を追加する。
- 検索ワード W が以前に入力されたことがない場合:
- 履歴の先頭に W を追加する。
検索ワード W が N 個与えられるので、N 個の検索ワードが与えられた後の履歴を表示するプログラムを書いてください。
入力される値
入力は以下のフォーマットで与えられます。
1 2 3 4 5 |
N W_1 W_2 ... W_N |
1 行目には検索ワードの数を表す整数 N が与えられます。
続く
N 行では検索ワード
W_i が与えられます。
続く
N 行のうちの
i 行目 (1 ≦
i ≦
N) には、検索ワード
W_i が与えられます。検索ワード
W_i は小文字のアルファベット
a ~ z のみからなる文字列です。
入力は合計
N + 1 行であり、 最終行の末尾に改行が 1 つ入ります。
期待する出力
検索ワードを N 個入力した後の検索履歴を出力してください。
出力の最後に改行を入れ、余計な文字、空行を含んではいけません。
考え方
執筆中
配列を作り、追加・削除を動的に行う。
解答例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
// 先頭行は読み飛ばし _ = readLine()! // 与えられた検索履歴を一気に読み込む let sa = Array(AnyIterator { readLine() }).map{ String($0) } // 保存する検索履歴 var history: [String] = [] for s in sa { // 過去に検索したことがある場合 if let index = history.firstIndex(where: { $0 == s }) { // index で指定された要素を削除する history.remove(at: index) } // 配列の先頭に検索ワードを入れる history.insert(s, at: 0) } // 結果表示 for s in history { print(s) } |