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
のとき6
、TUE
のとき5
、 WED
のとき4
、THU
のとき3
、FRI
のとき2
、SAT
のとき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)