AtCoder Beginner Contest 097 C問題
競技プログラミングで使える関数を実際の問題を通して紹介いたします。
今回は「add()」です。
add()はset関数で作成したものに対して要素を加えることができます。
今回の問題としては、入力した文字列の部分を切り取ってできる文字列を作って、
たくさんできた文字列の中でK番目に小さいものを出力するというもの。したがって、以下のように実装します。
s = input() K = int(input()) substr = set() for i in range(len(s)): for j in range(i+1, i+K+1): substr.add(s[i:j]) print(sorted(substr)[K-1])
コードの改善
競技プログラミングではプログラムの処理完了までの速度も重要な要素の一つですので、より短く簡潔なコードを書くことが重要です。
s = input() K = int(input()) kouho = [s]# for x in range(K)] for atama in range(len(s)): for offset in range(K): tes = s[atama:atama+offset+1] if tes in kouho: continue kouho.append(tes) kouho = sorted(kouho) if len(kouho) > K: kouho.pop() print(kouho[K-1])
独学プログラマー Python言語の基本から仕事のやり方まで
- 作者: コーリー・アルソフ,清水川貴之監訳,清水川貴之,新木雅也
- 出版社/メーカー: 日経BP社
- 発売日: 2018/02/24
- メディア: 単行本
- この商品を含むブログ (2件) を見る