このページについて
このページは、paiza ラーニング内に開設されているコンテンツ「レベルアップ問題集」で取り扱われているプログラミング課題について、独自の見解を述べたものです。
見解については、paizaラーニングの規約に基づき、許可されている範囲でのみ公開していますが、その内容については paiza とは一切関係なく、また paiza の立場を反映したものではありませんのでご注意ください。
挑戦する課題
レベルアップ問題集の配列活用メニューから「指定要素の先頭位置 (paizaランク D 相当)」を取り上げます。
以下は、問題公開 Web ページからの引用です。
問題
配列 A の要素数 N と整数 K , 配列 A の各要素 A_1, A_2, …, A_N が与えられるので、K であるような A の要素のうち、要素番号が最小のものを出力してください。
A に K が含まれない場合は -1 を出力してください。
入力される値
1 2 3 4 |
N K A_1 ... A_N |
- 1 行目では、配列 A の要素数 N と整数 K が半角スペース区切りで与えられます。
- 続く N 行では、配列 A の要素が先頭から順に与えられます。
期待する出力
A に K が含まれる場合は K であるような A の要素のうち要素番号が最小のものを、含まれない場合は -1 を 1 行で出力してください。また、出力の末尾には改行を入れてください。
考え方
執筆中
firstIndex(of:) を使う。解答例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// 先頭行を取得する let i = readLine()!.split(separator: " ").map { Int($0)! } // K の値を代入する let k = i[1] // 配列を行末まで取り込む let ia = Array(AnyIterator { readLine() }).map { Int($0)! } // firstIndex(of:) を使い、指定した値が現れる最初のインデックスを得る // firstIndex(of:) は指定した要素が見つからない場合には nil を返す let index = ia.firstIndex(of: k) ?? -2 // 結果表示 print(index + 1) |