このページについて
このページは、paiza ラーニング内に開設されているコンテンツ「レベルアップ問題集」で取り扱われているプログラミング課題について、独自の見解を述べたものです。
見解については、paizaラーニングの規約に基づき、許可されている範囲でのみ公開していますが、その内容については paiza とは一切関係なく、また paiza の立場を反映したものではありませんのでご注意ください。
挑戦する課題
レベルアップ問題集のCランクレベルアップメニューから「forループ (paizaランク C 相当)」を取り上げます。
以下は、問題公開 Web ページからの引用です。
問題
パイザ君の所属する会社では忘年会の余興で次のようなゲームを行います。まず、正整数 M が発表され、参加者は手元の紙に M 個、好きな数字を書きます。このとき、紙に書く数のそれぞれは 1 以上 M 以下であり、同じ数字を何度書いても構いません。その後、 1 以上 M 以下の数 K が発表され、各参加者は自分の紙に数字 K を書いた数だけポイントをもらい、ポイントの高い順に景品が配られます。
忘年会の参加者の人数 N と、数 M , K が与えられ、各参加者が書いた紙が与えられるので、それぞれの参加者の得点を計算して出力してください。
入力される値
入力は以下のフォーマットで与えられます。
1 2 3 4 |
N M K a_{1,1} ... a_{1,M} ... a_{N,1} ... a_{N,M} |
- 1 行目には上で説明した数 N, M, K が半角スペース区切りで与えられ、 2 行目から (N + 1) 行目までには各参加者が紙に書いた数字が M 個ずつ半角スペース区切りで、 N 回与えられます。
期待する出力
入力された通りの順番で、各参加者の得点を
N回、改行区切りで出力してください。
末尾に改行を入れ、余計な文字、空行を含んではいけません。
考え方
執筆中
解答例
1 2 3 4 5 6 7 8 9 10 11 |
// 先頭行の数値を読み込む let ia = readLine()!.split(separator: " ").map { Int($0)! } let k = ia[2] // 二次元配列にする let ia2 = Array(AnyIterator { readLine() }).map { $0.split(separator: " ").map { Int($0)! }} // 各行に含まれる k の数を出力する for i in ia2 { print(i.filter { $0 == k }.count) } |
1 2 3 4 5 6 7 8 9 10 11 |
// 先頭行の数値を読み込む let ia = readLine()!.split(separator: " ").map { Int($0)! } let k = ia[2] Array(AnyIterator { readLine() }) .map { $0.split(separator: " ") .map { Int($0)! } } .forEach { print($0.filter { $0 == k }.count) } |