【AtCoder】ABC339解説(Python)

日本レジストリサービス(JPRS)プログラミングコンテスト2024(AtCoder Beginner Contest 339)の解説記事です。

目次

ABC339 A – TLD

問題

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

問題の要約

英小文字と. のみからなる文字列 \(S\) が与えられるので最後の.以降の文字列を出力せよ。

制約

・\(S\) は英小文字と . からなる、長さ2以上100以下の文字列
・\(S\) には . が1つ以上含まれる
・\(S\) の末尾は. ではない

入力

\(S\)

出力

答えを出力せよ。

解説

入力の文字列を.で分割してリストに変換し、リストの最後の文字列を出力します。

解説

\(S\) を文字列して受け取ります。

# 入力
s=input()

入力の文字列を.で分割してリストに変換します。

# 入力を'.'で分割してリストに変換
s=list(s.split('.'))

リストの最後の文字列を出力します。リストの最後の要素はs[-1]と表すことができます。

# リストの最後の文字列を出力
print(s[-1])

解答

# 入力
s=input()

# 入力を'.'で分割してリストに変換
s=list(s.split('.'))

# リストの最後の文字列を出力
print(s[-1])

入力から出力まで、1行で書くこともできます。

print(list(input().split('.'))[-1])

ABC339 B – Langton’s Takahashi

問題

解説

実際にシミュレーションを行う。

解説

\(H, W, N\) をint型して受け取ります。

# 入力
H, W, N = map(int, input().split())

白で初期化されたグリッドgridを用意します。

# 白で初期化されたグリッド
grid = [['.' for _ in range(W)] for _ in range(H)]  

方向と位置の変数を用意して初期化します。

方向は0: 上, 1: 右, 2: 下, 3: 左で表します。

# 初期方向
direction = 0  # 0: 上, 1: 右, 2: 下, 3: 左
# 初期位置
x, y = 0, 0

方向0: 上, 1: 右, 2: 下, 3: 左に向いたときに1マス進むことを表す移動ベクトルdx, dyを用意します。

# 移動ベクトル (上, 右, 下, 左)
dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]

\(N\) マス進むシミュレーションをします。
現在のマスの色を変え、向きを変え、1マス進む操作を \(N\) 回繰り返します。1マス進む操作はグリッドがトーラス状なので余りを求めます。

for _ in range(N):
  # 現在のマスの色を変える
  if grid[x][y] == '.':
    grid[x][y] = '#'
    direction = (direction + 1) % 4  # 時計回りに90度回転
  else:
    grid[x][y] = '.'
    direction = (direction - 1) % 4  # 反時計回りに90度回転
  # 1マス進む
  x = (x + dx[direction]) % H 
  y = (y + dy[direction]) % W

最後にグリッドの色を出力します。

# グリッドを出力
for g in grid:
    print(''.join(g))

解答

# 入力
H, W, N = map(int, input().split())

# 白で初期化されたグリッド
grid = [['.' for _ in range(W)] for _ in range(H)]  

# 初期方向
direction = 0  # 0: 上, 1: 右, 2: 下, 3: 左
# 初期位置
x, y = 0, 0

# 移動ベクトル (上, 右, 下, 左)
dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]

for _ in range(N):
  # 現在のマスの色を変える
  if grid[x][y] == '.':
    grid[x][y] = '#'
    direction = (direction + 1) % 4  # 時計回りに90度回転
  else:
    grid[x][y] = '.'
    direction = (direction - 1) % 4  # 反時計回りに90度回転
  # 1マス進む
  x = (x + dx[direction]) % H 
  y = (y + dy[direction]) % W

# グリッドを出力
for g in grid:
    print(''.join(g))

ABC339 C – Perfect Bus

問題

解説

最初の乗客数を0人として乗降客数の変動をシミュレーションする。

解説

入力を受け取ります。

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

最初の乗客数と現在の乗客数を表す変数を用意して0で初期化します。

# 最初の乗客数
first=0
# 現在の乗客数
now=0

停車時の乗降客数の変動を現在の乗客数nowに加えます。もし現在の乗客数が 0 未満になったときは、マイナスになった人数が最初の乗っていた乗客firstとします。

for i in range(N):
  # 停車時の乗降客数の変動を加える
  now+=A[i]
  # もし現在の乗客数が 0 未満のとき
  if now<0:
    # マイナスになった人数が最初の乗っていた乗客とする
    first=max(first,-now)

最初の乗客数+現在の乗客数が答えになります。

# 最初の乗客数+現在の乗客数が答え
print(first+now)

解答

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

# 最初の乗客数
first=0
# 現在の乗客数
now=0

for i in range(N):
  # 停車時の乗降客数の変動を加える
  now+=A[i]
  # もし現在の乗客数が 0 未満のとき
  if now<0:
    # マイナスになった人数が最初の乗っていた乗客とする
    first=max(first,-now)

# 最初の乗客数+現在の乗客数が答え
print(first+now)
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次