AtCoder ABC 093 B – Small and Large Integers Python解説

スポンサーリンク

Small and Large Integers

以下を満たす整数をすべて昇順に出力してください。

A 以上 B 以下の整数の中で、小さい方から K 番目以内であるか、大きい方から K 番目以内である

AtCoder Beginner Contest 「Small and Large Integers」

range関数を使ってAからK、B-K+1からB+1までを出力すれば良さそうですが、場合によっては、小さい方からK番目の数字と大きい方からK番目以内の数字が重複する可能性があります。

例えば、Aが1でBが5、Kが3だとすると、小さい方から1,2,3、大きい方から3,4,5と3が回出てきてしまうので、先に重複する可能性がないか(b – a + 1) < (2 * k)で場合分けをしましょう。

a, b, k = map(int, input().split())

if (b - a + 1) < (2 * k):
    a_b = [x for x in range(a, b + 1)]
    
else:
    a_k = [x for x in range(a, a+k)]
    b_k = [y for y in range(b-k+1, b+1)]
    
    a_b = a_k + b_k
    
for i in a_b:
    print(i)

まず数字が重複する場合、A以上B以下の整数すべて出力することになるので、そのまま昇順に出力して大丈夫です。

重複しないときはAからK、 B-K+1からB+1までの配列をrange関数で用意し、配列同士をくっつければAからK、 B-K+1からB+1までの配列ができます。