AtCoder Regular Contest 009 B – おとぎの国の高橋君 をPython3で解く

Share

AtCoder上にある問題のうち、AtCoder Problemsでdiff 800以上と判定されているものを順番に解いていく企画。
基本的な考え方は全てコード中のコメントに入れてあるので、参照のこと。

出典:
AtCoder Regular Contest 009 B – おとぎの国の高橋君

AtCoder国での話だが、問題名に「おとぎの国」とあるので、つまりAtCoder国はおとぎの国ということだろうか。

変換、ソートまではそこまで悩まないだろう。
最後にソート後のAtCoder数をどう出力するか、という点がやや悩ましい。この回答ではAtCoder数字にインデックスを付ける感じで処理を行ったが、別途逆変換辞書を作成し、普通の数字のソート順に、逆変換して改めてAtCoder数字を出力~みたいなのでもいいのではないだろうか。

# AtCoder Regular Contest 009 B - おとぎの国の高橋君
# https://atcoder.jp/contests/arc009/tasks/arc009_2
# tag: 辞書変換 高橋君 AtCoder国

# AtCoder国と普通の数字の(文字列での)変換辞書を作成し、
# AtCoder数を文字列で受け取り、普通の数字へと変換後、
# ソートを行う

def main():
    atcoder_n = [c for c in input().split()]
    N = int(input())
    atcoder_nums = [input() for _ in range(N)]

    # 辞書作成
    a_to_n = {k:str(v) for v, k in enumerate(atcoder_n)}

    # 受け取ったAtCoder数字文字列 → 普通の数字文字列 → 数値と
    # 変換した後、インデックス付きで保存していく
    num_with_index = []
    for i, a_num in enumerate(atcoder_nums):
        n = int(''.join(a_to_n[c] for c in a_num))
        num_with_index.append((n, i))

    # ソート後、インデックスを元にしてAtCoder数で出力
    num_with_index.sort()
    for item in num_with_index:
        print(atcoder_nums[item[1]])

main()

Share

コメントを残す

メールアドレスが公開されることはありません。