このページについて
このページは、paiza ラーニング内に開設されているコンテンツ「レベルアップ問題集」で取り扱われているプログラミング課題について、独自の見解を述べたものです。
見解については、paizaラーニングの規約に基づき、許可されている範囲でのみ公開していますが、その内容については paiza とは一切関係なく、また paiza の立場を反映したものではありませんのでご注意ください。
挑戦する課題
レベルアップ問題集のデータセット選択メニューから「数値の出現率 (paizaランク C 相当)」を取り上げます。
以下は、問題公開 Web ページからの引用です。
問題
N 個の 0 以上 9 以下の整数が与えられます。各数値の出現回数をそれぞれ求め、「 0」の出現回数、「 1」の出現回数、…「 9」の出現回数、と順に数値を半角スペース区切りで出力してください。入力される値
1 2 |
N A1 A2 ... A_N |
- 入力値最終行の末尾に改行が1つ入ります。
- 文字列は標準入力から渡されます。
期待する出力
「 0」の出現回数、「 1」の出現回数、…「 9」の出現回数、と順に、i個目には i の出現回数を半角スペース区切りで出力してください。
1 |
A0 A1 ... A_9 |
入力例1
1 2 |
5 1 2 3 3 6 |
出力例1
1 |
0 1 1 2 0 0 1 0 0 0 |
考え方
執筆中。
出現回数をカウントするための変数を用意して、それに出現回数を入れれば良い。
今回の場合、出現する数値は
0 ... 9と範囲が決まっているため、最初から変数(配列)を用意してもそれほど無駄ではない。
解答例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
// 出現回数を入れる変数 var counts = Array(repeating: 0, count: 10) // 最初の行は読み飛ばし _ = readLine()! // 1. 1行読み込み // 2. Int に変換した上 // 3. 出現回数をカウントする readLine()!.split(separator: " ") .map { Int($0)! } .forEach { counts[$0] += 1 } // 配列を String に変換し、空白を入れて連結する let out = counts.map{String($0) } .joined(separator: " ") // 結果表示 print(out) |