1
0

リアルタイムに解けた問題

A - A Healthy Breakfast

問題文

高橋くんは、朝食にご飯、味噌汁、サラダを1皿づつ食べます。

高橋くんの家のテーブルは細長いので、3皿を横一列に並べました。並べ方は文字列$S$によって与えられ、左から$i$番目の皿は$S_{i}$がRならご飯、$S_{i}$がMなら味噌汁、$S_{i}$がSならサラダです。

ご飯の皿が味噌汁の皿より左にあるかどうかを判定してください。

制約

  • $|S|=3$
  • $S$にはRMSが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')
1
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
1
0