こんにちは, Shinoryoです.
今回はC++入門 AtCoder Programming Guide for beginners(APG4b)を, Pythonで無理やり解いてみた結果を書き連ねていこうと思います.
C++入門 AtCoder Programming Guide for beginners (APG4b) - AtCoder
AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.
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()) |
参考にしたサイト等
- nkmk様による「PythonのCounterでリストの各要素の出現個数をカウント」
PythonのCounterでリストの各要素の出現個数をカウント | note.nkmk.me
Pythonでリストやタプルの全要素の個数は組み込み関数len(), 各要素の個数(要素ごとの出現回数)はcount()メソッドで取得できる. さらに, Python標準ライブラリcollectionsのCounterクラスを使うと, 出現回数が多い順に要素を取得できたりする. ここでは, 全要素数をカウント: len() 各要素の個数(要素ごとの出現回数)を...
- Kotono様による「【Python入門】クラスの使い方を簡単解説で楽々マスター」
【Python入門】クラスの使い方を簡単解説で楽々マスター
Pythonでクラス(class)の使い方を理解したい そもそもクラスやオブジェクト指向って何? コンストラクタ?メソッド?継承?ってなに? プログラミング言語において, 「クラス(class)」や「オブジェクト指向」という言葉をよく耳にしますが, 使い方を理解していますでしょうか?クラスを簡単に説明すると, 処理を1つのまとまりとして定義したもので, あらゆるプログラミング言語で使われています. この記事ではクラスの使い方やコンストラクタ, メソッド, 継承などについて理解しておきたい方に向けて, 基本的な内容を解説していきます. この記事はこんな人のために書きました. 基本的なクラスの作り方を知りたい コンストラクタ, メソッド, 継承についても理解しておきたい クラスについてわかりやすく解説していますので, ぜひ参考にしてください. ※ この記事のコードはPython 3.7で動作確認しました. Pythonのクラスとは Pythonにはクラスという機能があります. このクラスを理解するためには, オブジェクト指向とは何かについても知る必要があります. オブジェクト指向とは, 基本的にオブジェクト(物)で構成されたプログラミング言語の種類のことを言います. Pythonではクラスや関数もすべて「オブジェクト」として扱われます. そして, 今回のメインであるクラスを元にして新しくオブジェクトを生成することが出来ます. こちらの記事を読んで, さらにオブジェクト指向についての知識を深めてからクラスについて学習していきましょう! Pythonのクラスの使い方 では, オブジェクト指向についての基本を学んだら, 実際にPythonでクラスを作ってみましょう. クラスの基本的な構文 Pythonにおけるクラスの基本的な構文はこのようになっています. class ClassName(): def __init__(self, ): hogehoge 小文字の「class」の後に, 好きなクラス名を指定しましょう. 関数では「def」で定義をしていましたが, ここでは「class」になります. 引数は, 今回は空欄にしておきましょう. そしてclassから始まる構文の内部に「__init__」という関数が定義されています. これはコンストラクタという, クラスの中でも重要な機能になります.
- nkmk様による「Python, formatで書式変換(0埋め, 指数表記, 16進数など)」
Python, formatで書式変換(0埋め, 指数表記, 16進数など) | note.nkmk.me
Pythonで数値や文字列を様々な書式に変換(フォーマット)する場合, 組み込み関数format()または文字列メソッドstr.format()を使う. ここでは, 組み込み関数format() 文字列メソッドstr.format() の使い方を説明したあとで, 左寄せ, 中央寄せ, 右寄せ ゼロ埋め 符号(プラス, マイナス) 桁区切り(カンマ, アンダースコア...
関連記事
AtCoder APG4bをPythonで解く(Ex1~5)
こんにちは, Shinoryoです. 今回は C++入門 AtCoder Programming Guide for beginners(APG4b) を, Pythonで無理やり解いてみた結果を書き連ねていこうと思います. C++入門 AtCoder Program...
AtCoder APG4bをPythonで解く(Ex6~10)
こんにちは, Shinoryoです. 今回は C++入門 AtCoder Programming Guide for beginners(APG4b) を, Pythonで無理やり解いてみた結果を書き連ねていこうと思います. C++入門 AtCoder Program...
AtCoder APG4bをPythonで解く(Ex11~15)
こんにちは, Shinoryoです. 今回は C++入門 AtCoder Programming Guide for beginners(APG4b) を, Pythonで無理やり解いてみた結果を書き連ねていこうと思います. C++入門 AtCoder Program...
AtCoder APG4bをPythonで解く(Ex16~18)
こんにちは, Shinoryoです. 今回は C++入門 AtCoder Programming Guide for beginners(APG4b) を, Pythonで無理やり解いてみた結果を書き連ねていこうと思います. C++入門 AtCoder Program...
AtCoder APG4bをPythonで解く(Ex19~21)
こんにちは, Shinoryoです. 今回は C++入門 AtCoder Programming Guide for beginners(APG4b) を, Pythonで無理やり解いてみた結果を書き連ねていこうと思います. C++入門 AtCoder Program...
0 件のコメント:
コメントを投稿 (Please feel free to ask me about your questions! You can use Japanese or English in the comments.)