このページについて
このページは、paiza ラーニング内に開設されているコンテンツ「レベルアップ問題集」で取り扱われているプログラミング課題について、独自の見解を述べたものです。
見解については、paizaラーニングの規約に基づき、許可されている範囲でのみ公開していますが、その内容については paiza とは一切関係なく、また paiza の立場を反映したものではありませんのでご注意ください。
挑戦する課題
レベルアップ問題集のCランクレベルアップメニューから「辞書式ソート (paizaランク D 相当)」を取り上げます。
以下は、問題公開 Web ページからの引用です。
問題
正整数 n が与えられ、数のペアが n 個与えられます。各ペアの最初の数はりんごの個数を、その次の数はバナナの個数を表しています。これらの数のペアを以下の規則に従って、偉い順に並び替えてください。
- ふたつのペアのりんごの数が異なる場合、りんごの数が多い方が偉い(この際、バナナの数は関係ない)。
- りんごの数が同じである場合、バナナの数が多い方が偉い。
入力される値
入力は以下のフォーマットで与えられます。
1 2 3 4 |
n a_1 b_1 ... a_n b_n |
- 1 行目に正整数 n が、 2 行目から (n + 1) 行目には半角スペース区切りの数のペア a_1 b_1, ..., a_n b_n が、それぞれ改行区切りで与えられます。
期待する出力
ペアを偉い順に並べ替え、改行区切りで n 行、順に出力してください。出力の各行は入力と同じく、
"a_i b_i" のように、りんごの個数とバナナの数が、この順に、半角スペースで区切られているものとします。
末尾に改行を入れ、余計な文字、空行を含んではいけません。
考え方
執筆中
解答例
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// 1行目は読み飛ばす _ = readLine()! // 2行目以降を二次元配列にする let ia = Array(AnyIterator { readLine() }) .map { $0.split(separator: " ") .map { Int($0)! } } // まず、配列の第一要素で比較を行い、同じであれば第二要素で比較を行う // 最後に配列から取り出し、空白を入れて出力す ia.sorted(by: { $0[0] > $1[0] ? true : ($0[0] == $1[0] ? $0[1] > $1[1] : false)}) .forEach{ print($0.map{ String($0) }.joined(separator: " ")) } |