0
0

パスワード作成 (paizaランク C 相当)

Posted at

K さんは paiza のアカウントを作成することにしました。そのためには、パスワードの設定が必要>なことがわかりました。
そこで K さんは忘れないように、次のようなルールにのっとって N 文字のパスワードを設定するこ>とにしました。

・ ルール
K さんは N 文字のうち、 Q 文字だけ覚えておく文字を決めておく。
具体的には n_i 文字目を c_i とだけ決めて、残りの全ての文字を C にする。

K さんの設定したパスワードを当ててください。

という問題。

N = int(input())     
Q = int(input()) 
for i in range(Q):
    A =[list(map(str,input().split()))]
C = input()
for i in range(1,N):
    if i == A[i-1][0]:
        print(A[i-1][1])
    else:
        print(C)

要するに、配列Aに条件を入れて、その後N回分ループして、Aのインデックスと同じだったら、Aの要素を出力、違ったらCを出力するということを考えた。

だが、これだとエラーになる。
なぜかというと、たとえば、上の場合、i=2のときA[1][0]を出力するわけだが、Aにはその要素は存在していない。つまり、条件配列は最後のインデックス番号まであるとは限らないため、インデックスがループを回る前に尽きてしまってエラーになるからである。

他にアイデアが見つからず30分を過ぎてしまいギブアップ。

答えは後ほど。

まず、配列は要素数をかけることで、型、要素数があらかじめ入った配列ができる。

n = [0] * Q
c = [""] * Q

ここで、nにはi文字目を、cにはc_i を登録。values配列に入った値を使う。

n[i] = int(values[0]) - 1
c[i] = values[1]

そして、ansという配列を作るパスワードのN文字分、全部Cで埋めてしまう。

ans = [C] * N

この時点で
ans = [C,C,C,C,C,...C)となっているわけだ。

で、ここからN回分cをループさせ、
該当するものはn[i]番目のところなので、c[i]を上書きさせる
ans[n[i]] = c[i]

そして結果を出力、というわけだ。

なるほど。。。。
まだまだでした。。。

配列の作り方や、配列の要素の出し方など、勉強しておきます。。。

N = int(input())
Q = int(input())
n = [0] * Q
c = [""] * Q

for i in range(Q):
    values = input().split()
    n[i] = int(values[0]) - 1
    c[i] = values[1]

C = input()

ans = [C] * N
for i in range(Q):
    ans[n[i]] = c[i]

print("".join(ans))

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0