このページについて
このページは、paiza ラーニング内に開設されているコンテンツ「レベルアップ問題集」で取り扱われているプログラミング課題について、独自の見解を述べたものです。
見解については、paizaラーニングの規約に基づき、許可されている範囲でのみ公開していますが、その内容については paiza とは一切関係なく、また paiza の立場を反映したものではありませんのでご注意ください。
挑戦する課題
レベルアップ問題集の配列活用メニューから「二人三脚 (paizaランク C 相当)」を取り上げます。
以下は、問題公開 Web ページからの引用です。
問題
生徒の身長が A_1, …., A_N であるような N 人のクラスで二人三脚の代表を決めることにしました。代表には、身長の差が最も小さいような 2 人を選出することにしました。選ばれた 2 人の身長を昇順に出力してください。
入力される値
1 2 3 4 |
N A_1 ... A_N |
- 1 行目では、クラスの人数 N が半角スペース区切りで与えられます。
- 続く N 行では、クラスメイト N 人の身長が与えられます。
期待する出力
1 2 |
a_1 a_2 |
- 選ばれた 2 人の身長 a_1 a_2 を昇順に出力してください。 ( a_1 < a_2)
- また、出力の末尾には改行を入れてください。
考え方
執筆中
解答例
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 |
// 1. 配列を一気に読み込み // 2. 先頭行を削除し // 3. Int に変換して // 4. 昇順に並び替える var ia = Array(AnyIterator { readLine() }) .dropFirst() .map { Int($0)! } .sorted() // [n -1] と [n] の身長差 var d: [Int] = [] // 身長差を配列に入れる for i in 1..<ia.count { d.append(ia[i] - ia[i - 1]) } // 一番小さい身長差を探す let min = d.min()! // 配列中の一番小さい身長差のインデックスを得る let index = d.firstIndex(of: min)! // 結果表示 print(ia[index]) print(ia[index + 1]) |