リアルタイムに解けた問題
A - A Healthy Breakfast
問題文
高橋くんは、朝食にご飯、味噌汁、サラダを1皿づつ食べます。
高橋くんの家のテーブルは細長いので、3皿を横一列に並べました。並べ方は文字列$S$によって与えられ、左から$i$番目の皿は$S_{i}$がR
ならご飯、$S_{i}$がM
なら味噌汁、$S_{i}$がS
ならサラダです。
ご飯の皿が味噌汁の皿より左にあるかどうかを判定してください。
制約
- $|S|=3$
- $S$には
R
M
S
が1文字づつ含まれる。
アルゴリズム
ご飯の皿が味噌汁の皿より左にあるのは、1皿目がご飯であるときか、最後の皿が味噌汁のときかである。あとはif文を用いたこの条件を満たす時Yesを出力する。
ソースコード
S = input()
if S[0] == 'R':
print('Yes')
exit()
if S[2] == 'M':
print('Yes')
exit()
print('No')
B - Vertical Reading
問題文
英小文字からなる文字列$S$と$T$が与えられます。
以下の条件を満たす$1 \leq c \leq w < |S|$となる整数の組$c$と$w$が存在するか判定してください。ただし、$|S|$は、文字列$S$の長さを表します。ここで、$w$は$|S|$未満である必要があることに注意してください。
- $S$を先頭から$w$文字毎に区切った、長さが$c$以上の文字列の$c$文字目を順番に連結した文字列が$T$と一致する
制約
- $S$と$T$は英小文字からなる文字列
- $1 \leq |T|$ $\leq$ $|S| \leq 100$
アルゴリズム
分割文字数$w$が、文字列$S$より大きくなるまでループを回す。
ループごとに、文字列$w$づつに分割し、for文でループを回す。分割した各要素が、$i$以上の長さであれば、各要素の$i$番目を取得し、連結。これが文字列$T$と一致すればYesを出力する。
ソースコード
S, T = input().split()
w = 1
while w < len(S):
listS = [list(S[i: i+w]) for i in range(0, len(S), w)]
for i in range(w):
comb = []
for s in listS:
if len(s) >= i+1:
comb.append(s[i])
if T == ''.join(comb):
print('Yes')
exit()
w += 1
print('No')