このページについて
このページは、paiza ラーニング内に開設されているコンテンツ「レベルアップ問題集」で取り扱われているプログラミング課題について、独自の見解を述べたものです。
見解については、paizaラーニングの規約に基づき、許可されている範囲でのみ公開していますが、その内容については paiza とは一切関係なく、また paiza の立場を反映したものではありませんのでご注意ください。
挑戦する課題
レベルアップ問題集の戦セットから「【競技7】奇数大好き山田さん (paizaランク C 相当)」を取り上げます。
以下は、問題公開 Web ページからの引用です。
問題
この問題は、弊社営業社員が競技プログラミングに挑戦したものです。
あなたは奇数が大好きな山田さんと数字の仕分けをすることになりました。
仕分けをする数字が与えられますので、奇数であるものを小さい順に出力してください。
入力される値
入力される値入力は以下のフォーマットで与えられます。
1 2 3 4 5 6 7 8 |
n (数字の総数) a_1 a_2 a_3 ... a_i ... a_n |
- 1行目で正の整数nが入力され、続くn行の各行で整数が1つずつ入力されます。
期待される出力
入力された正の整数a_iから奇数であるものを改行区切りで出力してください。
出力する順番は、小さい数字から出力します。
最後は改行し、余計な文字、空行を含んではいけません。
考え方
奇数だけ出力するので、 filter を使い、2で割った剰余が 1 のものだけ出力する。また、昇順で出力するため、途中で sort を使って並び替えを行う。
一番最初の行はデータの行数だが、 AnyIterator を使うのであれば必要ないので読み飛ばす。
解答例
1 2 |
_ = readLine()! _ = Array(AnyIterator { readLine() }).map { Int($0)! }.filter { $0 % 2 == 1 }.sorted().map { print($0) } |