N 個の文字列 S_1, ... , S_N と、Q 個の文字列 T_1, ... , T_Q が与えられます。各 T_i について、以下の処理を行ってください。
・ S_j == T_i を満たす最小の j を出力する。ただし、そのような j が存在しない場合は -1 を出力する。
という問題。
下以外はとくに難しいところはなく、すぐ解けた。
ポイントは
該当する要素のインデックスを調べるというところ。
見つかったかどうかのフラグ変数を実装したところ。
そしてループで該当するものが見つかったら
その場でbreakしないといけないところ。
N,Q = map(int,input().split())
S = [input() for _ in range(N)]
for _ in range(Q):
target = input()
flag = 0
for i in S:
if i == target:
order = S.index(i)
print(order+1)
flag = 1;
break;
if flag == 0:
print(-1)
答えを見ると辞書検索やっていた。
前回もそれだったけど、ここじゃ思いつかなかったんだ。。。
T が S に含まれているかどうかを毎回愚直に線形探索することで解くこともできますが、辞書を用いると単純かつ高速に探索することができるようになります。
S_1, S_2, ..., S_N の順で、以下のルールに従って辞書に S_i を登録します。
S_i がすでに登録されている場合 : 何もしない
S_i がまだ登録されていない場合 : キーを S_i、値を i として辞書に登録する
前回のを思い出しながらやってみる
N,Q = map(int,input().split())
#辞書作成
S ={}
for i in range(N):
value = input()
if value not in S:
S[value] = i + 1
#検索
for _ in range(Q):
value = input()
if value in S:
print(S[value])
else:
print(-1)
なるほど辞書検索ってこうやるんだな。。。
勉強になりました