このページについて
このページは、paiza ラーニング内に開設されているコンテンツ「レベルアップ問題集」で取り扱われているプログラミング課題について、独自の見解を述べたものです。
見解については、paizaラーニングの規約に基づき、許可されている範囲でのみ公開していますが、その内容については paiza とは一切関係なく、また paiza の立場を反映したものではありませんのでご注意ください。
挑戦する課題
レベルアップ問題集の配列活用メニューから「queue (9) 係 (paizaランク C 相当)」を取り上げます。
以下は、問題公開 Web ページからの引用です。
問題
データ構造の queue と同様の働きをするロボットがあります。ロボットは指示に応じて配列 A に対して 2 種類の仕事を行います、仕事の内容は以下の通りです。
- in n と指示された場合、A の末尾に n を追加してください。
- out と指示された場合、A の先頭の要素を削除してください。ただし、A が既に空の場合、何も行わないでください。
ロボットに与えられる指示の回数 N と、各指示の内容 S_i が与えられるので、ロボットが全ての処理を順に行った後の A の各要素を出力してください。
なお、初め配列 A は空であるものとします。
入力される値
1 2 3 4 |
N S_1 ... S_N |
- 1 行目では、ロボットに与えられる指示の回数 N が与えられます。
- 続く N 行では、先頭から順に指示が与えられます。
- S_i は in n ( n は整数) または out です。
期待する出力
1 2 3 |
A_1 ... A_i |
- ロボットが全ての指示をこなした後の A の要素を先頭から改行区切りで出力してください。
- また、出力の末尾には改行を入れてください。
入力例1
1 2 3 4 5 6 7 8 9 10 11 |
10 out in 33 out out out out in -76 out out in -53 |
出力例1
1 |
-53 |
考え方
執筆中
解答例
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 |
import Foundation // 空の Queue を準備する var queue: [Int] = [] // 1. 入力を全て読み込み // 2. 最初の行を切り落とし // 3. 一旦 String として一括変換し // 4. 各要素について判定を行う // 4-1. 行頭に "in" が含まれる場合、数値を Queue に追加する // 4-2. 上記以外の場合、Queue の先頭を削除し、Array に型変換して戻す Array(AnyIterator { readLine() }) .dropFirst() .map { String($0) } .forEach { s in if s.contains("in") { let v = s.split(separator: " ").map { String($0) } queue.append(Int(v[1])!) } else { queue = Array(queue.dropFirst()) } } // 結果出力 for i in queue { print(i) } |