このページについて
このページは、paiza ラーニング内に開設されているコンテンツ「レベルアップ問題集」で取り扱われているプログラミング課題について、独自の見解を述べたものです。
見解については、paizaラーニングの規約に基づき、許可されている範囲でのみ公開していますが、その内容については paiza とは一切関係なく、また paiza の立場を反映したものではありませんのでご注意ください。
挑戦する課題
レベルアップ問題集の配列活用メニューから「内定 (paizaランク C 相当)」を取り上げます。
以下は、問題公開 Web ページからの引用です。
問題
人事のあなたは、N 人の中から採用者を決定します。N 人のテストの点数はそれぞれ A_i (1 ≦ i ≦ N)です。テストの点数が K 点以上の人全員を採用したいのですが、得点の高い方から M 人に辞退されてしまいました。あなたの採用することのできる最大の人数を答えてください。採用できる人数が 0 人の場合もあることに気をつけてください。
入力される値
1 2 3 4 |
N K M A_1 ... A_N |
- 1 行目では、テストを受けた人数 N と、テストのボーダーの点数 K , 辞退された人数 M が半角スペース区切りで与えられます。
- 続く N 行では、 N 人のテストの点数 A_i (1 ≦ i ≦ N)が改行区切りで与えられます。
期待する出力
あなたの採用することのできる最大の人数を 1 行で出力してください。
また、出力の末尾には改行を入れてください。
考え方
執筆中
解答例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
// 各種条件の行を読み込む let ia = readLine()!.split(separator: " ").map { Int($0)! } // テストを受けた人数 N let n = ia[0] // テストのボーダーの点数 K let k = ia[1] // 辞退された人数 M let m = ia[2] // 1. 受験者データを全て読み込み // 2. Int に変換し // 3. K 点以上のデータだけ抜き出し // 4. カウントする let ic = Array(AnyIterator { readLine() }) .map { Int($0)! } .filter { $0 >= k } .count // 選考人数の表示 print(ic - m < 1 ? "0" : ic - m) |