0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AtCoder APG4bをPythonで解く(Ex22~24)

0
Last updated at Posted at 2026-02-13

C++入門 AtCoder Programming Guide for beginners(APG4b)の問題をPythonで解いてみました。

EX22 - 2つ目の値でソート

Pythonでリストをソートする関数 sort() では、引数 key を受け取れます。
key には関数などを指定でき、要素に指定した処理を行った結果をもとにソートできます。

例えば、ラムダ式 lambda x: x[1] (リストを受け取り、リストの2番目を返す) を key に指定すると、リストの2つ目の値でソートできます。

main.py (AtCoder APG4b EX22)
n = int(input())
input_list = [list(map(int, input().split())) for _ in range(n)]

input_list.sort(key=lambda x: x[1])

for i in range(n):
    print(*input_list[i])

また、受け取る際には $(b_i, a_i)$ としておき、出力時に $(a_i, b_i)$ に戻す方法も考えられます。

main.py (AtCoder APG4b EX22)
n = int(input())
input_list = [list(map(int, input().split()))[::-1] for _ in range(n)]

input_list.sort()

for i in range(n):
    print(*input_list[i][::-1])

EX23 - 最頻値

collections.Counter で各要素の出現個数をカウントし、それを出現回数順に並べ替えます。

main.py (AtCoder APG4b EX23)
from collections import Counter

n = int(input())

# 配列を入力してCounterで各要素の出現個数をカウント, それを出現回数順に並べ替える
counts = Counter(map(int, input().split())).most_common()

# [0][0]に最も出現した要素, [0][1]にその出現回数が格納されている
print(*counts[0])

EX24 - 時計の実装

構造体に似たものとして、Pythonにはクラスがあります。
複数の型をまとめた新しい型をつくることができて(self.○○のように書く)、そのクラスから生成されたインスタンスに関連した処理を行う関数を定義することができます。

main.py (AtCoder APG4b EX24)
# クラスClockの定義
class Clock:
    def __init__(self):
        self.hour = 0
        self.minute = 0
        self.second = 0
    
    # 時・分・秒を表す3つの引数を受け取り, クラスClockの属性hour, minute, secondに代入する
    def set(self, h, m, s):
        self.hour = h
        self.minute = m
        self.second = s
  
    # クラスClockの属性hour, minute, secondのデータを返す関数
    def to_str(self):
        return f"{self.hour:02}:{self.minute:02}:{self.second:02}"
  
    def shift(self, diff_second):
        new_total_second = (self.hour * 3600 + self.minute * 60 + self.second + diff_second) % 86400
        self.hour = new_total_second // 3600
        self.minute = new_total_second % 3600 // 60
        self.second = new_total_second % 60

# 入力
hour, minute, second = map(int, input().split())
diff_second = int(input())

# クラスClockを用いてインスタンスclockを作成
clock = Clock()

# インスタンスclockのメソッドsetを呼び出す
clock.set(hour, minute,second)

# インスタンスclockのメソッドto_strを呼び出して戻り値を出力
print(clock.to_str())

# インスタンスclockのメソッドshiftを呼び出す
clock.shift(diff_second)

# インスタンスclockのメソッドto_strを呼び出して戻り値を出力
print(clock.to_str())

参考にしたサイト等

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?