Port 53

明日のための技術メモ

AtCoder ABC147

AtCoder ABC147解いた分だけまとめ。
今回はABの2完。 Cはbit全探索というやつらしい。蟻本見ないとだな。

ということで、今回でやっと灰色の半分まで来ました。 f:id:saturn-glave:20191208233225p:plain

最近の精進具合はこんな感じ。9月にA問題が埋まっていて、今はB問題を練習中。
当分はAB瞬殺に重点を置こうと思っている。
早く茶色になりたい。
AtCoder Problems役立つのでおすすめ。

f:id:saturn-glave:20191208232934p:plain

目次

A. Blackjack

問題文 f:id:saturn-glave:20191208231641p:plain

A1, A2, A3の和で場合分けするだけなので、瞬殺する。

#coding:utf-8
a, b, c = map(int, input().split())

if a + b + c >= 22:
    print('bust')
else:
    print('win')

B. Palindrome-philia

問題文 f:id:saturn-glave:20191208231914p:plain

文字列が偶数の場合と奇数の場合で分ける

  • 偶数
    半分に分けて、後半を逆順にしておく。前半とそれを比較して違う部分をカウント
  • 奇数
    真ん中から前と後ろに分けて真ん中は無視。あとは前半と一緒。

スライス操作で位置調整に手間取る。
たまたま文字列操作を多くやっていたけど本番だと焦った。

逆順にする時はスライスで簡単にできる。

#逆順にする
s = list(input())
s_reverse = s[::-1]

実際に書いたものがこちら

#coding:utf-8
s = list(input())
n = len(s)
ans = 0

#文字の長さが偶数の時、前半と後半の逆の文字列を比較する
if n % 2 == 0:
    sf = s[0:int(n/2)]
    sb = s[int(n/2):]
    sb_r = sb[::-1]
    #print(sf, sb_r)
    for i in range(0, int(n/2)):
        if sf[i] != sb_r[i]:
            ans += 1
#奇数の時は、真ん中を無視してそれ以外の前半・後半の逆の文字列を比較する
else:
    sf = s[0:int(((n-1)/2))]
    sb = s[int(((n-1)/2)+1):]
    sb_r = sb[::-1]
    #print(sf, sb_r)
    for i in range(0, int((n-1)/2)):
        if sf[i] != sb_r[i]:
            ans += 1
print(ans)

引き続き頑張りましょ。