1
1

More than 3 years have passed since last update.

PythonでABC101のA~C問題を解く

Last updated at Posted at 2019-12-31

はじめに

前回からratedコンテストには出てないので進捗はないです。
タイトル詐欺になってますが、Cは解けませんでした。

A問題

問題
考えたこと
sは入力値
出力はsの中の'+'と'-'によって決まるので、sの中の'+'と'-'をカウントすればいいと考えた。

s = list(input())
print(s.count('+')-s.count('-'))

countメソッドはintで返されるので、そのまま計算しています。

B問題

問題
考えたこと
nは入力値
最初に考えたのは、nをどうやって十進法の桁表示にするかです。最初は、桁を数えて$10^{桁数}$で割って計算しようかと思いましたが、pythonではもっと便利な方法があるのではとなり別の方法で実装しました。nをstrにしてlistにするという方法です。流れとしては、int→str→listです。pythonでは、strをlistにすると一文字ずつの要素を持ったlistになります。こうすることによってlistのindexを指定することによって計算することができるので楽になったかな?

n = int(input())
n_l = list(str(n))
m = 0
for i in n_l:
    j = int(i)
    m += j
if n % m != 0:
    print('No')
else:
    print('Yes')

計算はごり押しです。

C問題

問題
解けませんでした。言い訳、ARCの問題だから。見苦しい
考えたこと
n,k,aは入力値
問題を見て、最小値は必ず1になることは分りました。理由は、数列aは1~nを並びかえた数列なのでどのように並び換えても最小値は1になるからです。そして、最初はnのなかに何個の(k-1)が入るかを考えました。これが一番おしかった。もちろんこの考え方は間違ってます。どこが間違っているかというと、最小値1を除いた数列の要素を変換するので、全体の要素はnではなく(n-1)になります。ここを見落していました。この間違いに気付けなかった自分が悲しい。


n, k = map(int,input().split())
a = list(map(int,input().split()))
ans =  n // (k-1)
print(ans)

もちろんWAです。
このあとも色々考えましたが、迷宮に入って結局解けませんでした。
一応、解説を読んで理解はしたつもりです。

まとめ

今回はCが解けなかったので、102のCは解けるようにがんばります。Cまで解けるようになりたい。

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