Paizaラーニングの練習問題(Bクラス)

プログラミングPaiza,Python

paizaラーニングの練習問題(Bクラス)を解けたので、苦労した点について書いてみます。

解答例では、「head」変数を使って、出力する配列の位置を制御して回答していましたが、その方法は思いつかなかったので、数列Aの配列から「range(i,j)」を使って、開始する配列の位置「i」に、前に出力した文字数を足すことで、必要な数列を出力することにしました。

# coding: utf-8
# 自分の得意な言語で
# Let's チャレンジ!!
N,M = input().split(" ")
A = input().split(" ")
B = input().split(" ")
N = int(N)
M = int(M)
for i in range(len(A)):
    A[i]=int(A[i])
for i in range(len(B)):
    B[i]=int(B[i])
#print(N,M,A,B)
k=0
for i in range(len(B)):
    for j in range(k,k+B[i]):
        print(A[j],end="")
        if j < k+B[i]-1:
            print(" ",end="")
    k+=B[i]
    print()
    
for j in range(k,k+B[i]):

「range(k,k+B[i]」の部分で、「k」から始まり「k+B[i]」でおわる範囲を設定して変数「j」に格納し、配列Aから数列を取り出します。

k+=B[i]

for文を抜けたところで、変数「k」に、今回使用した数列分B[i]を足しています。これで毎回配列を呼び出すときに、前回出力した数列の桁だけ、変数「k」が増えるので、次の「range(k,k+B[i]」の部分では、「k+B[i]」の値だけ配列を読み出す位置が変わります。

プログラミングPaiza,Python

Posted by atommy