中百舌鳥雑記組

競技プログラミングを始めてみました。過去問や勉強したことをまとめていきます。

Atcoder Beginner Contest 280 レポート

はじめに

本日、Atcoder Beginner Contestに初参加しました!!
結論から申し上げますと、A, B, Cの3問正解で3完といったところでした。 D問題の素因数分解を使うことはわかりましたが、それから先が出来なかった…。解説を読み込んでこのブログでも解説できるように頑張ります…。
では今回は私が解けた問題の解説を行います。

A - Pawn on a Grid

問題文

A - Pawn on a Grid

解法

こちらの問題は読み込んだ文字列の中に #がいくつ入っているかカウントする、といったものです。 list(文字列)で文字列を1文字ずつのリストに直して、for文で検索しています。
ただ、A問題はfor文を使わなくても解けるらしいので、別解はたくさんありそうです。

h, w = map(int, input().split(" "))
cnt = 0
for i in range(h):
    s = input() 
    s = list(s)
    cnt += s.count("#")
print(cnt)

B - Inverse Prefix Sum

問題文

B - Inverse Prefix Sum

解法

こちらの問題は、入力された数列の要素と次の要素の差を要素とした新たな数列を作ればOKです。

n = int(input())
s_list = list(map(int, input().split(" ")))
ans = [] 
for i in range(len(s_list)):
    if i == 0:
        ans.append(s_list[0])
    else:
        ans.append(s_list[i] - s_list[i-1])
print(" ".join(map(str, ans)))

C - Extra Character

問題文

C - Extra Character

解法

2つの文字列を一致させるために、どこに文字を挿入するかという問題です。 for ループの中で2つの文字列の各要素を比較して、異なればそこに文字を挿入するべきなので、そのインデックスを出力します。
ただ、この実装だと一番最後に挿入する場合がカバーできないので、flagで判断して最後に挿入しています。

s = input() 
t = input() 
s_list = list(s) 
t_list = list(t) 
flag = False
for i in range(len(s)):
    if s_list[i] != t_list[i]:
        print(i+1)
        flag = True
        break
if flag == False:
    print(len(t))

おわりに

ABCに初参加して思ったのが、「100分は意外と早く過ぎる」ということですね。コードを早く正確に書く時間はもちろんのこと、使うアルゴリズムの判断や数学の能力など自分に足りないものが浮き彫りになりました。
できる限り毎回参加してレートが上がるよう頑張っていきます。
目指せ茶コーダー!!