このページについて
このページは、paiza ラーニング内に開設されているコンテンツ「レベルアップ問題集」で取り扱われているプログラミング課題について、独自の見解を述べたものです。
見解については、paizaラーニングの規約に基づき、許可されている範囲でのみ公開していますが、その内容については paiza とは一切関係なく、また paiza の立場を反映したものではありませんのでご注意ください。
挑戦する課題
レベルアップ問題集のCランクレベルアップメニューから「多重ループ (paizaランク D 相当)」を取り上げます。
以下は、問題公開 Web ページからの引用です。
問題
m 個の文字 c_1, …, c_m と、 n 個の文字列 S_1, …, S_n が与えられます。各 c_i (1 ≤ i ≤ m) について、各 S_j (1 ≤ j ≤ n) に c_i が出現するかをそれぞれ調べ、出現する場合は “YES” を、そうでない場合には “NO” を、そのつど出力してください。
入力される値
入力は以下のフォーマットで与えられます。
1 2 3 4 5 6 7 8 |
m c_1 ... c_m n S_1 ... S_n |
- 1 行目に正整数 m が、 2 行目から (m + 1) 行目では文字 c_1, ...,c_m が、 (m + 2) 行目に正整数 n が、 (m + 3) 行目から ( m + n + 2) 行目では文字列 S_1, ..., S_n が、それぞれ改行区切りで与えられます(入力は全部で (m + n + 2) 行)。
期待する出力
c_1 が S_1 に出現するかどうか、 c_1 が S_2 に出現するかどうか、 … 、 c_1 が S_n に出現するかどうか、 c_2 が S_1 に出現するかどうか、 c_2 が S_2 に出現するかどうか、 … 、 c_2 が S_n に出現するかどうか、 … 、 c_m が S_1 に出現するかどうか、 c_m が S_2 に出現するかどうか、 … 、 c_m が S_n に出現するかどうか、という順番で m * n 回出力してください。末尾に改行を入れ、余計な文字、空行を含んではいけません。
考え方
執筆中
もっとシンプルに書けそうな気がする。
解答例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
import Foundation func getLines() -> [String] { var s: [String] = [] let i = Int(readLine()!)! for _ in 0..<i { s.append(readLine()!) } return s } let c = getLines() let s = getLines() for cc in c { for ss in s { print(ss.contains(cc) ? "YES" : "NO") } } |