[Python]AtCoder Beginner Contest 163を解いてみた(A~C)

プログラミング

AtCoder Beginner Contest 163にPythonで参加しました。Unratedになってしまいました。

A – Circle Pond

問題

半径Rの円の周長を出力してください。

自分の回答

x = float(input())
print(x * 2 * 3.141592)

入力された値に2と円周率をかければ良いですね。

B – Homework

問題

高橋君の夏休みはN日間です。
夏休みの宿題がM個出されており、i番目の宿題をやるにはAi日間かかります。
複数の宿題を同じ日にやることはできず、また、宿題をやる日には遊ぶことができません。
夏休み中に全ての宿題を終わらせるとき、最大何日間遊ぶことができますか?
ただし、夏休み中に全ての宿題を終わらせることができないときは、かわりに -1を出力してください。

自分の回答

N, M = map(int, input().split())
works = list(map(int,input().split()))

if N >= sum(works):
  print(N - sum(works))
else:
  print("-1")

夏休みの日数N、宿題にかかる日数sum(works)の大きさを比べて、Nの方が大きければ、遊ぶ日数があるということなので、N – sum(works)を出力します。

C – management

自分の回答(誤)

# 誤回答
N = int(input())
works = list(map(int, input().split()))
 
for i in range(1,N + 1):
  print(works.count(i))

毎度お馴染み、誤回答から。これだと、実行時間超過になります。Nが多くなってくると、いちいちcountをしているとあっという間に、時間が超過してしまいます。

自分の回答(正)

# 正解
N = int(input())
works = list(map(int, input().split()))
ans = [0] * (N + 1)
 
for i in range(0,N - 1):
  ans[works[i]] += 1

ans.pop(0)
for i in ans:
  print(i)

まずは、初期値0のリストansを用意します。
そして、リストworksの値を先頭から取り出して、その値でansの位置を指定します。そして、指定した場所の値にプラス1をして行きます。
出力する前に、先頭を削除してから、出力して行きます。

感想

今回は結構早くC問題まで解けました。しかし、Unratedになってしまったのが残念です。

タイトルとURLをコピーしました