【AtCoder】ABC146解説(Python)

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

目次

ABC146 A – Can’t Wait for Holiday

問題

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

問題の要約

文字列SUN,MON,TUE,WED,THU,FRI,SAT のいずれかを与え、それぞれ日曜日、月曜日、火曜日、水曜日、木曜日、金曜日、土曜日、土曜日を表しているとき、次の日曜日まであと何日か求めよ。

解法1

if文で条件分岐を行う。

解説

まず入力を \(S\) で受け取ります。

S = input()

\(S\) は SUNのとき7、 MONのとき6TUEのとき5、 WEDのとき4THUのとき3FRIのとき2SATのとき1 を出力します。

if S == "SUN":
  print(7)
elif S == "MON":
  print(6)
elif S == "TUE":
  print(5)
elif S == "WED":
  print(4)
elif S == "THU":
  print(3)
elif S == "FRI":
  print(2)
elif S == "SAT":
  print(1)

解答

S = input()
if S == "SUN":
  print(7)
elif S == "MON":
  print(6)
elif S == "TUE":
  print(5)
elif S == "WED":
  print(4)
elif S == "THU":
  print(3)
elif S == "FRI":
  print(2)
elif S == "SAT":
  print(1)

解法2

曜日を配列として持つ。

解説

入力として受け取る可能性のある曜日を配列で持っておきます。

yobi=['SUN','MON','TUE','WED','THU','FRI','SAT']

入力を受け取り、順に比較して一致したら配列の7-iが答えになります。

S=input()
for i in range(7):
  if S==yobi[i]:
    print(7-i)

解答

yobi=['SUN','MON','TUE','WED','THU','FRI','SAT']
S=input()
for i in range(7):
  if S==yobi[i]:
    print(7-i)

ABC146 B – ROT N

問題

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

問題の要約

英大文字からなる文字列 \(S\) と整数 \(N\) が与えられるので、\(S\) の各文字をアルファベット順で \(N\) 個後の文字に置き換えた文字列を出力せよ。

解法

1文字ずつ \(N\) 個後の文字に置き換えた文字を求める。

解説

まず入力を受け取ります。

# 入力
N=int(input())
S=input()

アルファベットの文字列を用意します。

# アルファベットの文字列
ALPHA = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

答えの文字列を空で用意します。

# 答え
ans=''

\(S\) を順に1文字ずつ \(N\) 個後の文字に置き換えた文字に変換します。

# Sの各文字を順に見る
for s in S:
  # 置き換える前はアルファベット順で何番目か
  i=ALPHA.index(s)
  # N 個後の文字はアルファベット順で何番目か
  j=(i+N)%len(ALPHA)
  # N 個後の文字を答えの文字列に加える
  ans+=ALPHA[j]

最後に答えを出力します。

# 出力
print(ans)

解答

# 入力
N=int(input())
S=input()
# アルファベットの文字列
ALPHA = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

# 答え
ans=''

# Sの各文字を順に見る
for s in S:
  # 置き換える前はアルファベット順で何番目か
  i=ALPHA.index(s)
  # N 個後の文字はアルファベット順で何番目か
  j=(i+N)%len(ALPHA)
  # N 個後の文字を答えの文字列に加える
  ans+=ALPHA[j]

# 出力
print(ans)
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次