このページについて
このページは、paiza ラーニング内に開設されているコンテンツ「レベルアップ問題集」で取り扱われているプログラミング課題について、独自の見解を述べたものです。
見解については、paizaラーニングの規約に基づき、許可されている範囲でのみ公開していますが、その内容については paiza とは一切関係なく、また paiza の立場を反映したものではありませんのでご注意ください。
挑戦する課題
レベルアップ問題集のデータセット選択メニューから「動的配列 (paizaランク D 相当)」を取り上げます。
以下は、問題公開 Web ページからの引用です。
問題
N 個の要素からなる数列 Aが与えられます。 A に対し、次の 3 つの操作をおこなうプログラムを作成してください。- push_back : Aの末尾に xを追加する
- pop_back : Aの末尾を削除する
- print : 数列 A を半角スペース区切りで出力する
入力される値
1 2 3 4 5 6 7 |
N Q A1 A2 A3 ... A_N query1 query2 query3 ... query_Q |
- 1 行目に A の要素数 N、操作回数 Q が与えられます。 2 行目には A の各要素の値が与えられます。続く Q 行に各操作の情報が与えられます。各操作の情報は
1 |
0 x |
1 |
1 |
1 |
2 |
期待する出力
答えの数値を出力してください。
1 |
N |
- 末尾に改行を入れ、余計な文字、空行を含んではいけません。
最初数列 A は「 1 2 3」です。最初の操作は「 0 10」で「 push_back」なので、 A の末尾に 10 を追加して「 1 2 3 10」になります。 2 つ目の操作も同じく「 push_back」なので、 2 つ目の操作後Aは「 1 2 3 10 12」になります。 3 つ目の操作は「 print」なので数列A「 1 2 3 10 12」を出力します。 4 つ目の操作は「 pop_back」なので末尾の「 12」を削除して、数列Aは「 1 2 3 10」になります。最後 5 つ目の操作は「 print」なので数列Aの「 1 2 3 10」を出力します。
入力例1
1 2 3 4 5 6 7 |
3 5 1 2 3 0 10 0 12 2 1 2 |
出力例1
1 2 |
1 2 3 10 12 1 2 3 10 |
考え方
執筆中。
数列とあるが、具体的な演算を行うわけではないので文字列として扱う。
解答例
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 30 31 |
// 1. 行末まで一気に読み込み // 2. 使用しない先頭行は切り落とし // 3. 文字列の二次元配列にする let sa = Array(AnyIterator { readLine() }) .dropFirst() .map { $0.split(separator: " ") .map { String($0) } } // 先頭行(初期配列)を取り出す var array = sa[0] // 操作が入っている配列(第一要素)から最終要素まで順次取り出す。 for s in sa[1...] { switch s[0] { case "0": // 配列の末尾に追加 array.append(s[1]) case "1": // 配列の末尾を削除 array.removeLast(1) case "2": // 配列の要素を出力 print(array.joined(separator: " ")) default: break } } |