0
0

More than 1 year has passed since last update.

【勉強記録】多重ループ (paizaランク D 相当)

Posted at

目次

  • 問題文
  • 書いたコード
  • 解答例
  • 学んだこと
  • 振り返り

問題文

詳細はコチラ

問題文の要約

ある与えられたアルファベットが単語内に含まれるか。含まれたらYES、含まれなければNOを表示せよ。
アルファベットと単語は複数与えられることもある。その場合は総当たりで確認する。

入力例2
2
c
d
2
cat
dog

出力例2
YES
NO
NO
YES

書いたコード(その1)

結論から言うと、突破できませんでした。
下記のコードは誤りです。

main.py
lang_count = input()
lang = []

for i in lang_count:
    lang.append(input())

count = int(input())

for i in range(len(lang)):
    for j in range(count):
        ans = input()
        if lang[i] in ans:
            print("YES")
        else:
            print("NO")

肝心の後半に行く前に前半で既に間違っていました。。
lang_countはstr型の文字列が入ってるので、アルファベット複数になった瞬間アウトです。
また、後半部分、最初のforループでrange(len(lang))とまどろっこしいことをしているのですが、
これも単純にlangに変えて上げれば良さそうです。

書いたコード(その2)

main.py
lang_count = int(input()) # lang_count = 2
lang = []

for i in range(lang_count):
    lang.append(input()) # lang = ['c', 'd']

count = int(input()) # count = 2
for i in lang:
    for j in range(count):
        ans = input()
        if i in ans:
            print("YES")
        else:
            print("NO")

気持ち見た目がスッキリしました。
が、inputの回数が合いません。langが1の場合しか正確に返せません。
やっぱり、inputを別にしよう、となると解答例そのままでした。

解答例(コメントアウト部分は追記。)

main.py
m = int(input())
c = [""] * m # m = 4, c = ['', '', '', '']

# 有無を確認すべきアルファベットのリスト
for i in range(m):
    c[i] = input()

n = int(input())
S = [""] * n

# 調べる単語リスト
for i in range(n):
    S[i] = input()

for i in range(m):
    for j in range(n):
        if c[i] in S[j]:
            print("YES")
        else:
            print("NO")

リストを作るときのc[i] = input()、リストから引っ張るときのif c[i] in S[j]:
後から見直すときに何が渡っているのかわかりやすくていいなと思いました。
何回か見ていると思うのですが中々自分で使えていないので意識していこうと思います。

学んだこと

  1. 無理やり一つの塊に処理を詰め込まないこと

一言

ワクチン接種後の調子も戻ってきたので、勉強し直したいと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0