【AtCoder】ABC303解説(Python)

日鉄ソリューションズプログラミングコンテスト2023(AtCoder Beginner Contest 303)の解説記事です。

目次

ABC303 A – Similar String

問題

問題文の要約は以下の通りです。

問題の要約

長さ\(N\) の文字列 \(S , T\) が似た文字列か判定せよ。似た文字列とは \(S , T\) の \(i\) 文字目が次のいずれかの場合のことである。
・同じ文字
・一方が1で、もう一方がl
・一方が0で、もう一方がo

制約

・\(N\) は1以上100以下の整数
・\(S , T\) は英小文字及び数字からなる長さ \(N\) の文字列

入力

\(N\)
\(S\)
\(T\)

出力

\(S\) と\(T\) が似た文字列の場合 Yes を、そうでない場合 No を出力せよ。

解説1

1文字ずつ似た文字の条件にあてはまるか判定する。

解説

まず入力を \(N\) , \(S\) , \(T\) を受け取ります。

N=int(input())
S=input()
T=input()

\(i\) 文字目が似た文字かどうか判定するために \(N\) 文字目までfor文でループさせます。

for i in range(N):

\(i\) 文字目が似た文字ではないときにNoを出力します。

  if not(S[i]==T[i] 
     or (S[i]=='1' and T[i]=='l')
     or (S[i]=='o' and T[i]=='0')
     or (S[i]=='l' and T[i]=='1')
     or (S[i]=='0' and T[i]=='o')):
    print('No')
    exit()

すべてが似た文字の時はYesを出力します。

print('Yes')

解答

N=int(input())
S=input()
T=input()
for i in range(N):
  if not(S[i]==T[i] 
     or (S[i]=='1' and T[i]=='l')
     or (S[i]=='o' and T[i]=='0')
     or (S[i]=='l' and T[i]=='1')
     or (S[i]=='0' and T[i]=='o')):
    print('No')
    exit()
print('Yes')

解説2

似た文字をreplaceして同じ文字列になるかどうかで判定する。

解説

0oに、1lreplaceします。

S=input().replace("0", "o").replace("1", "l")
T=input().replace("0", "o").replace("1", "l")


\(S\) と \(T\) が一致したらYesを一致しなければNoを出力します。

if S==T:
  print('Yes')
else:
  print('No')

解答

N=int(input())
S=input().replace("0", "o").replace("1", "l")
T=input().replace("0", "o").replace("1", "l")
if S==T:
  print('Yes')
else:
  print('No')
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次