デンソークリエイトプログラミングコンテスト2023(AtCoder Beginner Contest 309)の解説記事です。
目次
ABC309 A – Nine
問題
問題文の要約は以下の通りです。
問題の要約
図のような 1 から 9 までの数字が書かれた 3 × 3 の盤面がある。
1 以上 9 以下の整数 \(A\), \(B\) ( \(A < B\) )を与えるので、\(A\) と \(B\) のマスが左右に隣接しているか判定せよ。
制約
・\(1 \le A < B \le 9\)
・\(A\), \(B\) は全て整数
入力
\(A\) \(B\)
出力
\(A\) と \(B\) が左右に隣接しているならば Yes
、そうでないならば No
を出力せよ。
解説
\(A < B\) なので、\(A\) と \(B\) が左右に隣接しているとは、B=A+1
を満たし、\(A\) が3
と6
でないときになる。これを満たすか判定する。
解説
\(A\), \(B\) をint
型で受け取ります。
# 入力
A,B=map(int,input().split())
B=A+1
を満たし、\(A\) が3
と6
でないときは左右に隣接しているのでYes
、そうでない時は No
を出力する。
if B==A+1 and A!=3 and A!=6:
print('Yes')
else:
print('No')
解答
# 入力
A,B=map(int,input().split())
if B==A+1 and A!=3 and A!=6:
print('Yes')
else:
print('No')
ABC309 B – Rotate
問題
解説
\(1\) 行目、\(N\) 行目とそれ以外の行で場合分けを行う。
解説
まず入力を受け取ります。
# 入力
N=int(input())
s=[input() for _ in range(N)]
\(1\) 行目、\(N\) 行目とそれ以外の行で場合分けを行い答えを出力します。
for i in range(N):
if i==0:
print(s[1][0],end='')
print(s[0][:N-1])
elif i==N-1:
print(s[N-1][1:],end='')
print(s[N-2][N-1])
else:
print(s[i+1][0],end='')
print(s[i][1:N-1],end='')
print(s[i-1][N-1])
解答
# 入力
N=int(input())
s=[input() for _ in range(N)]
for i in range(N):
if i==0:
print(s[1][0],end='')
print(s[0][:N-1])
elif i==N-1:
print(s[N-1][1:],end='')
print(s[N-2][N-1])
else:
print(s[i+1][0],end='')
print(s[i][1:N-1],end='')
print(s[i-1][N-1])
ABC309 C – Medicine
問題
解説
飲む薬の錠数を日数を小さい順にシミュレートする。
解答
# 入力
N,K=list(map(int,input().split()))
# 1日目の薬の合計錠数
sum=0
# N種類の薬のリスト
medicine=[]
# 薬のリストに追加・合計錠数の計算
for _ in range(N):
a,b=list(map(int,input().split()))
medicine.append([a,b])
sum+=b
# N種類の薬のリストを日数の昇順にソート
medicine.sort()
# 1日目にK錠以下の場合は1を出力
if sum<=K:
print(1)
# a日目以降がK錠以下の場合はa+1を出力
else:
for a,b in medicine:
sum-=b
if sum<=K:
print(a+1)
exit()