このページについて
このページは、paiza ラーニング内に開設されているコンテンツ「レベルアップ問題集」で取り扱われているプログラミング課題について、独自の見解を述べたものです。
見解については、paizaラーニングの規約に基づき、許可されている範囲でのみ公開していますが、その内容については paiza とは一切関係なく、また paiza の立場を反映したものではありませんのでご注意ください。
挑戦する課題
レベルアップ問題集のデータセット選択メニューから「集合の結合 (paizaランク C 相当)」を取り上げます。
以下は、問題公開 Web ページからの引用です。
問題
N 個の要素からなる数列 A, B が与えられます。 A または B に含まれる値をすべて列挙し、昇順に出力してください。ただし出力する数列は重複した要素を取り除いてください。入力される値
1 2 3 |
N A1 A2 ... A_N B1 B2 ... B_N |
- 入力値最終行の末尾に改行が1つ入ります。
- 文字列は標準入力から渡されます。
期待する出力
答えとなる数列を出力してください。末尾に改行を入れ、余計な文字、空行を含んではいけません。
1 |
C1 C2 ... |
入力例1
1 2 3 |
3 1 2 3 3 4 5 |
出力例1
1 |
1 2 3 4 5 |
考え方
執筆中
Set に入れてソートして出力する。
二次元配列を一次元配列にするために
flatMap を使う。
解答例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
// Set<Int> を作り、空配列を代入する var sets: Set<Int> = [] // 1. 最終行まで読み込み // 2. 必要のない最初の行を切り落とし // 3. 空白で区切られた数値を Int の二次元配列にし // 4. 一次元配列として組み直し // 5. Set に追加する Array(AnyIterator { readLine() }) .dropFirst() .map { $0.split(separator: " ") .map { Int($0)! } } .flatMap { $0 } .forEach { sets.insert($0) } // 出力用に整形する // 1. Set の値をソートし // 2. 出力用に String に変換し // 3. 空白区切りで一つの文字列にする let result = sets.sorted() .map { String($0) } .joined(separator: " ") // 結果出力 print(result) |