ABC192参戦記

プログラミング

少し前に2021年が始まり、あっという間にひと月が終わりました。と書いた気がしますが、あと1週間ほどで2か月目も終わりそうになっていますね。

引き続き慌ただしい日常を送っていますが、今回のABC192は少し落ち着いた状態で参加出来ました。

この記事では、A~C問題のACコードも記載していきます。使用言語はPython3です。

A – Star

剰余を求められる問題。

現在のコイン枚数を100で割った余りを次の100枚から引けば答えが出ます。

# SOMPO HD プログラミングコンテスト2021(AtCoder Beginner Contest 192)
# A - Star

N=int(input())

ans=100-(N%100)

print(ans)

比較的最近、おつりを求める似たような問題(ABC173-A)がありました。

B – uNrEaDaBlE sTrInG

問題タイトルが読みにくい!ホントに!

繰り返し処理ができるかと、小文字/大文字の判定ができるかを問われる問題。

Python3では、islower()関数を利用したら小文字か否かを判定できます。
(isupper()で大文字判定もできます。)

偶奇判定は %2==0 or %2==1 で出来るので、これらを組み合わせて判定していき、途中で条件と異なる場合はNoを出力して終了し、最後までプログラムが実行されたらYesを出力すればOKです。

# SOMPO HD プログラミングコンテスト2021(AtCoder Beginner Contest 192)
# B - uNrEaDaBlE sTrInG

S=input()

for i in range(len(S)):
    L=S[i]
    if i%2==0:        
        if L.islower()==True:
            continue
        else:
            print("No")
            exit()
    else:
        if L.islower()==True:
            print("No")
            exit()
        else:
            continue

print("Yes")

C – Kaprekar Number

書いている関数をプログラムできますか。と問われている問題。
C問題の問題文が読むの大変なものが多くて厳しいですね。
コンテスト中は焦っているのか、今回の内容もなかなか頭に入ってこなくてつらかったです。

書いてあることを実装するのは、まずは数字の各桁を配列に入れて、昇順/降順でソート。ソートした後の配列を数字として取り出せばOKです。
大きいほうから小さいほうを引く関数も作って、for文でK回実施すればOKです。

# SOMPO HD プログラミングコンテスト2021(AtCoder Beginner Contest 192)
# C - Kaprekar Number

def func(strNum):
    numlist=list(map(int,strNum))
    g1list=sorted(numlist,reverse=True)
    g2list=sorted(numlist)
    g1=int("".join(list(map(str,g1list))))
    g2=int("".join(list(map(str,g2list))))
    fx=g1-g2
    return fx

N,K=map(int,input().split())

for _ in range (K):
    N=func(str(N))

print(N)

コメント

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