【AtCoder】ABC309解説(Python)

デンソークリエイトプログラミングコンテスト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\) が36でないときになる。これを満たすか判定する。

解説

\(A\), \(B\) をint型で受け取ります。

# 入力
A,B=map(int,input().split())

B=A+1 を満たし、\(A\) が36でないときは左右に隣接しているので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()
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次