ちゃぽーん

日記です。

6月8日はAtCoderのABC357でした

本日6月8日(土)は毎週恒例のAtCoderの日でした。
今回もやっぱり最初の2問だけしか解けませんでした。

A問題はすぐに解けるはずだったのです。
しかし、なんとなく解き始めてしまったために頭の中の整理ができずにツボってしまいました。
結局A問題に50分も使ってしまいました。

B問題はそれほど時間をかけずに解けたのですが、スマートな解き方じゃない気がしています。

atcoder.jp

A - Sanitize Hands

消毒できる手の本数(M)よりも宇宙人のすべての手の数が少ない場合のことが抜けていました。

if sum(H) < M:
    ans = len(H)

これがなかったためになかなか正解にできませんでした。

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

total = 0
ans = 0
i = 0

if sum(H) < M:
    ans = len(H)
else:
    while i < N:
        total += H[i]
        if total == M:
            ans = i+1
            break
        elif total > M:
            ans = i
            break
        i += 1

print(ans)

atcoder.jp

B - Uppercase and Lowercase

問題文を読んで順番にコードにしていった感じなのでなんか違う気もしたのですが、無事に正解になりました。

S = input()

u = []
l = []
for i in range(len(S)):
    if S[i].isupper():
        u.append(S[i])
    else:
        l.append(S[i])

if len(u) > len(l):
    print(S.upper())
else:
    print(S.lower())

atcoder.jp

関連記事

chapone.hatenadiary.org

Pythonのリストに要素を追加・削除する

私はプログラミング初心者なのですが、最近やっとリスト(配列)の重要性を理解できてきました。
「配列は重要です」とどの書籍にも書いているので、そうなんだろうなと思いながら3年くらい経ってしまいました。

私は週1回競技プログラミングの「AtCoder」をやっていまして、Pythonを使っています。 AtCoderではもちろんリストが必ず出てくるのですが、リストの処理がわからなくなってしまうことが多いです。

リストへ要素を追加・削除する方法

まず、基本的なリストへ要素を追加・削除する方法を振り返ろうと思います。 書籍「独習Python」で確認しています。

lists.append(x) # 末尾に追加
lists.insert(i,x) # i番目の直前に挿入
lists.pop([i]) # i番目を削除

appendとappendChild

私はJavaScriptも勉強しているのですが、よくJavaScriptのpushとappendがごっちゃになります。
Pythonでappendをよく使っていると、JavaScriptのappendChildを使うときによくわからなくなってしまいます。あと、p5.jsのpush()とpop()も同じスペルなのにまったく違う用途なのでむつかしいです。
いろいろ整理する必要がありそうです。

ブログで整理

PythonJavaScriptで混乱してしまうことをこのブログで整理していこうと思う。 ブログで整理して何度も振り返って確認してたら、いつかは問題なくなるだろう。

AtCoderでexit()が使える?

AtCoderを復習してたら、回答例の中に「exit()」が使われていた。 「これってコマンドプロンプトPythonシェルを終わらせるコマンドじゃないの?」と疑問だった。 Wandboxでも試してみたら問題なかった。

で、私はわかっていなかったのです。 AtCoderとかWandboxはコマンドプロンプトのようなものなのですかね。 Wandboxには今まで気づいてなかったのですが、以下のようなものがありました。

$ python3 prog.py

見逃していました。 このような書き方がされているということはコマンドプロンプトのようなものですよね。 ちゃんと調べてみようと思います。