【AtCoder】ABC338解説(Python)

AtCoder Beginner Contest 338の解説記事です。

目次

ABC338 A – Capitalized?

問題

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

問題の要約

英大文字・英小文字からなる空でない文字列 \(S\) が与えられるので \(S\) の先頭の文字は大文字であり、それ以外の文字はすべて小文字であるかどうか判定せよ。

制約

・\(S\) は長さ1以上100以下の文字列
・\(S\) の各文字は英大文字または英小文字である。

入力

\(S\)

出力

条件が満たされていれば Yes、そうでなければ No を出力せよ。

解説

\(S\) の長さが1か2以上かで場合分けを行い、条件を満たすか判定する。

解説

\(S\) を文字列して受け取ります。

# 入力
S=input()

\(S\) の長さが1のときは\(S\) が大文字であればよいので、len(S)==1 かつ S.isupper()で判定できます。

# S が1文字の時
if len(S)==1 and S.isupper():
  print('Yes')

\(S\) の長さが2以上のときは\(S\) の先頭が大文字、2文字目以降は小文字であればよいので、S[0].isupper() かつ S[1:].islower()で判定できます。

# S が2文字以上の時
elif S[0].isupper() and S[1:].islower():
  print('Yes')

条件を満たさないときはNoを出力します。

else:
  print('No')

解答

# 入力
S=input()

# S が1文字の時
if len(S)==1 and S.isupper():
  print('Yes')
# S が2文字以上の時
elif S[0].isupper() and S[1:].islower():
  print('Yes')
else:
  print('No')

条件分岐をまとめることもできます。

# 入力
S=input()

# 出力
print('Yes' if S[0].isupper() and (len(S)==1 or S[1:].islower()) else 'No')

ABC338 B – Frequency

問題

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

問題の要約

英小文字からなる文字列 \(S\) が与えられるので、 \(S\) に最も多く出現する文字のうちアルファベット順で最も早いものを出力せよ。

制約

・\(S\) の長さは1以上100以下
・\(S\) の各文字は英小文字である。

入力

\(S\)

出力

\(S\) に最も多く出現する文字のうちアルファベット順で最も早いものを出力せよ。

解説

アルファベット順で最も早いものから順にそれまでのアルファベットより \(S\) に多く出現しているかを判定する。

解説

英小文字のアルファベットは標準ライブラリのstring.ascii_lowercaseに一覧があるのでこれを使用します。
そのためにまず標準ライブラリのstringimportします。

# 標準ライブラリのstringをimport
import string

次に入力 \(S\) を文字列として受け取ります。

# 入力
S = input()

答えの英小文字ansと答えの英小文字の出現回数ans_numを変数として用意します。

# 答えの英小文字
ans = ''
# 答えの英小文字の出現回数
ans_num=0

アルファベット順で最も早いものから順にそれまでのアルファベットより \(S\) に多く出現しているかを判定します。

多く出現している場合は答えと出現回数を変更し、最後に答えを出力します。

# アルファベットを順に調べる string.ascii_lowercase='abcdefghijklmnopqrstuvwxyz'
for w in string.ascii_lowercase:
    # 現在最大の英小文字の出現回数より多いか?
    if S.count(w) > ans_num:
         # 多い場合は答えと出現回数を変更する
        ans = w
        ans_num= S.count(w)
# 出力
print(ans)

解答

# 標準ライブラリのstringをimport
import string

# 入力
S = input()

# 答えの英小文字
ans = ''
# 答えの英小文字の出現回数
ans_num=0

# アルファベットを順に調べる string.ascii_lowercase='abcdefghijklmnopqrstuvwxyz'
for w in string.ascii_lowercase:
    # 現在最大の英小文字の出現回数より多いか?
    if S.count(w) > ans_num:
         # 多い場合は答えと出現回数を変更する
        ans = w
        ans_num= S.count(w)
# 出力
print(ans)
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次