Python 3 の練習を兼ねて, AtCoder Regular Contest 002 の 問題B(割り切れる日付) ~ 問題C (コマンド入力) を解いてみた.
■感想.
1. C++で実装しようとしたところ, 実装方法で迷宮入りしたため, Python 3 で, 書き換えたものである(汗).
本家のサイトAtCoder Regular Contest 002をご覧下さい.
■Python版プログラム(問題B/AC版).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# -*- coding: utf-8 -*- import datetime # 1. 入力情報取得. I = input() # 2. 1000/01/01 ~ 2999/12/31 で調査. # 日付の加算・減算. # https://python.civic-apps.com/timedelta/ iDate = datetime.datetime.strptime(I, '%Y/%m/%d') passage = 0 ans = "" while True: # passage日加算して調査. nDate = iDate + datetime.timedelta(days = passage) y = nDate.year m = nDate.month d = nDate.day # 割り切れる日付かどうか. quoYM, modYM = divmod(int(y), int(m)) quoYMD, modYMD = divmod(quoYM, int(d)) # 割り切れる日付が来たら, 終了. if modYM == 0 and modYMD == 0: ans = datetime.datetime(y, m, d, 0, 0, 0, 0) ans = ans.strftime('%Y/%m/%d') break # passage を インクリメント. passage = passage + 1 # 3. 出力. print(ans) |
■Python版プログラム(問題C/AC版).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# -*- coding: utf-8 -*- # 1. 入力情報取得. N = int(input()) C = str(input()) # 2. ボタンの入力回数を計算. c = "ABXY" ans = N for la in range(4): for lb in range(4): # Lボタン作成. L = c[la:la+1] + c[lb:lb+1] for ra in range(4): for rb in range(4): # Rボタン作成. R = c[ra:ra+1] + c[rb:rb+1] # print(L + " " + R) if L != R: lc = C.replace(L, "L") rc = lc.replace(R, "R") # ボタン入力回数更新. ans = min(ans, len(rc)) # 3. 出力. print(ans) |
■参照サイト
AtCoder Regular Contest 002