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

投稿日:  更新日:2022/09/02

Atcoder Python

B!
Daniel AgreloによるPixabay(https://pixabay.com/)からの画像

こんにちは, Shinoryoです.

今回はC++入門 AtCoder Programming Guide for beginners(APG4b)を, Pythonで無理やり解いてみた結果を書き連ねていこうと思います.

EX22 - 2つ目の値でソート

多次元リストのソートでは, 1番目の値から順に比較されます. 2番目の値でソートするためには, リストの1番目と2番目を入れ替えればよいでしょう.

# リストの1番目と2番目を入れ替える関数
def switchpair(list, len):
newlist = []
for i in range(len):
newlist += [[list[i][1], list[i][0]]]
return newlist
# 入力と, switchpair, ソート, switchpair
n = int(input())
pairs = switchpair(sorted(switchpair([[int(x) for x in input().split()] for _ in range(n)], n)),n)
# 出力
for i in range(n):
print(pairs[i][0], end=" ")
print(pairs[i][1])

EX23 - 最頻値

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

from collections import Counter
n = int(input())
# 配列を入力してCounterで各要素の出現個数をカウント, それを出現回数順に並べ替える
acountsort = Counter([int(x) for x in input().split()]).most_common()
# [0][0]に最も出現した要素, [0][1]にその出現回数が格納されている
print("{0} {1}".format(acountsort[0][0], acountsort[0][1]))

EX24 - 時計の実装

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

# クラスClockの定義
class Clock:
# 時・分・秒を表す3つの引数を受け取り, クラスClockの属性hour, minute, secondに代入する
def set(self,h,m,s):
self.hour, self.minute, self.second = h, m, s
# クラスClockの属性hour, minute, secondのデータを返す関数
def to_str(self):
# {0:0=2}のように指定して0埋めを行う
return "{0:0=2}:{1:0=2}:{2:0=2}".format(self.hour, self.minute, self.second)
def shift(self, diff_second):
# 現在の時刻を秒単位で表す
totalsecond = self.hour*3600 + self.minute*60 + self.second
# 時刻を動かす
totalsecond += diff_second
# 日単位の繰り上げ, 繰り下げを行う
if totalsecond >= 86400 :
# 日へ繰り上げ
totalsecond -= 86400
elif totalsecond < 0 :
# 日から繰り下げ
totalsecond += 86400
# 動かした後の時刻を時・分・秒で表す
self.hour = totalsecond // 3600
totalsecond %= 3600
self.minute = totalsecond // 60
self.second = totalsecond % 60
# 入力
hour, minute,second = [int(x) for x in 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())

参考にしたサイト等

関連記事

Search

About Me

自分の写真
理系大学生でした. Bloggerを利用して発信を行っています.

Labels

Blog Archives