0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

AtCoder Beginner Contest 283 A〜C問題をPythonで解いてみました

Posted at

ABC283(AtCoder Beginners Contest 283)
A〜C問題をPythonで解いてみました。

  • コードは雑めです。ゆるしてー
  • 競技プログラミングの勉強一切したこと無いので、テクニックは知らないよ。ごめんねー

A問題(diff=8)

提出コード

a, b = map(int,input().split())
print(a**b)

Pythonでは累乗を**で書けます

B問題(diff=35)

提出コード

n = int(input())
a = list(map(int,input().split()))
q = int(input())
# print("a=",a)
 
for q_i in range(q):
  query = list(map(int,input().split()))
  # print(f"queriy_{q_i}=",query)
  k2 = query[1]-1
  if query[0] == 1:
    a[k2] = query[2]
  elif query[0] == 2:
    print(a[k2])

プログラミングに慣れていないとちょっと戸惑ったかもしれませんね。(というか「AtCoderの問題文に」かもしれませんが)
$A_N$の配列を $ Q_Q $ で書き換えつつ、print()で出力していく問題になっているので、落ち着いて理解すれば大丈夫です。

  • まず $N$と$A_N$、$Q$を通常通り取得します。
  • $Q$の回数分$query$を受け取りながら、$query[0]$ の数値によって処理を分けます(if文の部分ですね)
    • $query[0]$が1の場合は$a[k-1]$の部分を$query[2]$で書き換えます
    • $query[0]$が2の場合は$print(a[k-1])$します。

という感じですね。
diff=35とA問題のような難易度でしたので解けた方は多かったようです。

C問題(diff=88)

提出コード

s = input()
pointer = 0
push_count = 0
end_s = len(s)
 
while pointer < end_s:
  if s[pointer] == '0':
    if pointer+1 < end_s:
      if s[pointer+1] == '0':
        pointer += 1
  pointer += 1
  push_count += 1
print(push_count)

単純化すると 0が連なっている時だけ押した数を減らす 問題です。
私のプログラムでは、pointerは文字列の操作用、push_countはレジ打ち回数カウント用です。
0が見つかったとき(s[pointer] == '0')だけ、次も0かどうかを見て(s[pointer+1] == '0')、0の場合はpointerのみ+1しています。
こちらもdiff=88とA〜B問題のような難易度でしたので解けた方は多かったようです。

感想

ここ何回か、A~C問題めちゃくちゃ簡単ですね。

0
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?