このページについて
このページは、paiza ラーニング内に開設されているコンテンツ「レベルアップ問題集」で取り扱われているプログラミング課題について、独自の見解を述べたものです。
見解については、paizaラーニングの規約に基づき、許可されている範囲でのみ公開していますが、その内容については paiza とは一切関係なく、また paiza の立場を反映したものではありませんのでご注意ください。
挑戦する課題
レベルアップ問題集の配列活用メニューから「重複要素の削除 (paizaランク D 相当)」を取り上げます。
以下は、問題公開 Web ページからの引用です。
問題
配列 A の要素数 N と配列 A の各要素 A_1, A_2, …, A_N が与えられるので、同じ値の要素が 2 つ以上含まれないように A を加工した新たな配列 B を作成してください。
ただし、 A に同じ値の要素が 2 つ以上あった場合、それらのうち先頭の要素を B に採用するものとします。
入力される値
1 2 3 4 |
N A_1 ... A_N |
- 1 行目では、配列 A の要素数 N が与えられます。
- 続く N 行では、配列 A の要素が先頭から順に与えられます。
期待する出力
1 2 3 |
B_1 ... ... |
- 同じ値の要素が 2 つ以上含まれないように A を加工した新たな配列 B の各要素を改行区切りで出力してください。
- また、出力の末尾には改行を入れてください。
考え方
執筆中
解答例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
// 出現した文字を入れる文字列 var na: [String] = [] // 1. 行末まで読み込み // 2. 必要のない最初の行を削除し // 3. 文字列に変換し // 4. filter でフィルタリング。 // 4-1. na にすでに含まれていれば false // 4-2. na にふくまれていなければ、na に追加して true // 5. フィルタリングされたものだけ表示 Array(AnyIterator { readLine() }) .dropFirst() .map{ String($0) } .filter { s in if na.contains(s) { return false } else { na.append(s) return true }} .forEach { print($0) } |