【AtCoder】ABC402解説(Python)

東京海上日動プログラミングコンテスト2025(AtCoder Beginner Contest 402)の解説記事です。

目次

ABC402 A – CBC

問題

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

問題の要約

英大文字と英小文字からなる文字列 \(S\) が与えられます。 \(S\) の英大文字のみを元の順序で連結して得られる文字列を出力せよ。

解説1

大文字の一覧を用意して、1文字ずつ大文字かどうか判定する。

解説

入力を受け取ります。

# 入力
S=input()

答えの文字列ansを用意します。入力の文字列を順番に見て、大文字のとき答えの文字列に連結します。大文字かどうかはs in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'で判定できます。

# 答えの文字列
ans=''

# 入力の文字列を順番に見る
for s in S:
  # 大文字のとき文字を連結する。
  if s in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ':
    ans+=s

# 出力
print(ans)

解答

# 入力
S=input()

# 答えの文字列
ans=''

# 入力の文字列を順番に見る
for s in S:
  # 大文字のとき文字を連結する。
  if s in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ':
    ans+=s

# 出力
print(ans)

解説2

大文字の一覧はstring.ascii_uppercaseで用意されているのでこれを使用する。

string.ascii_uppercaseをそのままprintすると大文字の一覧が出力されます。

import string
print(string.ascii_uppercase)
ABCDEFGHIJKLMNOPQRSTUVWXYZ

解説

stringを使用するのでこれをimportし、入力を受け取ります。

import string

# 入力
S=input()

答えの文字列ansを用意します。入力の文字列を順番に見て、大文字のとき答えの文字列に連結します。大文字かどうかはs in string.ascii_uppercaseで判定できます。

# 答えの文字列
ans=''

# 入力の文字列を順番に見る
for s in S:
  # 大文字のとき文字を連結する。
  if s in string.ascii_uppercase:
    ans+=s

# 出力
print(ans)

解答

import string

# 入力
S=input()

# 答えの文字列
ans=''

# 入力の文字列を順番に見る
for s in S:
  # 大文字のとき文字を連結する。
  if s in string.ascii_uppercase:
    ans+=s

# 出力
print(ans)

ABC402 B – Restaurant Queue

問題

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

問題の要約

はじめ、待ち行列には誰も並んでいません。待ち行列に並ぶ人は必ず、注文する料理のメニュー番号が書かれた食券を持っています。 \(Q\) 個の以下のいずれかの形式のクエリを処理せよ。

  • 1 X:メニュー番号Xの食券を持った人が行列の末尾に並ぶ。
  • 2:行列の先頭の人をレストランに案内し、その人のメニュー番号を出力する。

解説1

リストで待ち行列を管理する。

リストの最後に追加するにはappend()、リストの最初の要素を取得し削除するにはpop(0)を用います。

解説

入力を受け取ります。

# 入力
Q=int(input())

待ち行列のリストを用意し、 \(Q\) 個のクエリを順に受け取ります。

  • 1 X:メニュー番号Xの食券を持った人が行列の末尾に並ぶ。

1番目のクエリの場合、リストの最後に追加するにはappend()を用います。

  • 2:行列の先頭の人をレストランに案内し、その人のメニュー番号を出力する。

2番目のクエリの場合、リストの最初の要素を取得し削除するにはpop(0)を用います。

# リスト
list=[]

# Q個のクエリを処理
for _ in range(Q):
  # クエリを受け取り
  n,*x= map(int,input().split())
  # リストに追加
  if n==1:
    list.append(x[0])
  # 先頭をメニュー番号を出力、先頭を削除
  else:
    print(list.pop(0))

解答

# 入力
Q=int(input())

# リスト
list=[]

# Q個のクエリを処理
for _ in range(Q):
  # クエリを受け取り
  n,*x= map(int,input().split())
  # リストに追加
  if n==1:
    list.append(x[0])
  # 先頭をメニュー番号を出力、先頭を削除
  else:
    print(list.pop(0))

解説2

キューで待ち行列を管理する。

キューの最後に追加するにはappend()、キューの最初の要素を取得するにはque[0]、削除するにはpopleft()を用います。

解説

キューを使用するためライブラリをimportし、入力を受け取ります。

from collections import deque

# 入力
Q=int(input())

待ち行列のキューを用意し、 \(Q\) 個のクエリを順に受け取ります。

  • 1 X:メニュー番号Xの食券を持った人が行列の末尾に並ぶ。

1番目のクエリの場合、キューの最後に追加するにはappend()を用います。

  • 2:行列の先頭の人をレストランに案内し、その人のメニュー番号を出力する。

2番目のクエリの場合、キューの最初の要素を取得するにはque[0]、削除するにはpopleft()を用います。

# キュー
que=deque()

# Q個のクエリを処理
for _ in range(Q):
  # クエリを受け取り
  n,*x= map(int,input().split())
  # キューに追加
  if n==1:
    que.append(x[0])
  # 先頭をメニュー番号を出力、先頭を削除
  else:
    print(que[0])
    que.popleft()

解答

from collections import deque

# 入力
Q=int(input())

# キュー
que=deque()

# Q個のクエリを処理
for _ in range(Q):
  # クエリを受け取り
  n,*x= map(int,input().split())
  # キューに追加
  if n==1:
    que.append(x[0])
  # 先頭をメニュー番号を出力、先頭を削除
  else:
    print(que[0])
    que.popleft()
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次