考えて競プロする

プログラミングコンテストの問題をどう考えて解いたかを記録していくブログです。使用言語はPython3

ABC003-B - AtCoderトランプ を解く

ABC003-B - AtCoderトランプ


なんか問題の意味がよくわからないな…サンプル見てみるか

(サンプル確認)

  

なるほど

一行目の文字列と二行目の文字列が一致していれば "You can win"

一致しなければ "You will lose" を出力すればいいわけか

 

でもって "@" は "a", "t", "c", "o", "d", "e", "r" のいずれかの文字に置き換えられる

ここがポイントだな

 

それぞれ頭から一字ずつ見ていって、違ってたら×…

ただし "@" のときだけ処理を変える感じで書けばいいか

 

片方が "@" のとき、もう片方が "a", "t", "c", "o", "d", "e", "r", "@" なら◯

それ以外なら×にすればいいな

 

提出したコード

# 入力
S=input()
T=input()

# 文字列長(SとTは同じ長さなのでとりあえずSの長さを取得した)
le=len(S)

for i in range(le):
  s=S[i]
  t=T[i]
  if s!=t:
    # sが"@"のとき、tが"a","t","c","o","d","e","r","@"のいずれかならセーフ
    if s=='@' and t in 'atcoder@':
      pass
    # tが"@"のとき、sが"a","t","c","o","d","e","r","@"のいずれかならセーフ
    elif t=='@' and s in 'atcoder@':
      pass
    # それ以外の不一致はアウト
    else:
      print('You will lose')
      exit()

# チェックに引っかからなければセーフ(You can win)
print('You can win')

 

今回は "何も処理をしない" という意味の pass を使用して

チェックがセーフだったときの処理を書いてみた

(if句内に何も書かないとエラーになるので)

 

あとはチェックがアウトだったときは

exit() を使ってその場で処理を終了させてみた

(アウトが判明した時点で処理を続ける意味はないので)

 

提出結果はAC
ちょっと不安だったけど通ってよかった
 
解説を読んでみたところ、手抜き実装として連想配列を使ったものが
紹介されていたが、これはこれで難しいような…
気になる人は読んでみてください