デンソークリエイトプログラミングコンテスト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()
