A問題 キャンディーと2人の子供
1 2 3 4 5 6 |
a,b,c = map(int, input().split()) if a == (b+c) or b == (a+c) or c == (a+b): print('Yes') else: print('No') |
C問題 一次元リバーシ
方針
3つの入力例を見てみると、B→W、もしくはW→Bへと変わった数が答えになっていることが読み取れます。
BとWが変化する回数を数えれば良さそうでした。
変化する回数を数える方法はいろいろあると思いますが、私は文字列WBと文字列BWを区切り文字として分割してリストに格納し、リストの要素数の合計-2とすることで解答しました。
正解はしたものの、もっと良い方法があると思います。
解答
1 2 3 4 5 6 |
s = input() WB = s.split('WB') #[1] BW = s.split('BW') #[2] print(len(WB)+len(BW)-2) #[3] #print(WB) #print(BW) |
[1]’WB’を区切り文字として分割したリストがWBに格納されます。
[2]’BW’を区切り文字として分割したリストがBWに格納されます。
[3]’WB’や’BW’がなかった場合、それぞれの変数には分割されていない元の文字列がそのまま入っています。
例①:s=’WWW’の場合
WB = ‘WWW’ BW = ‘WWW’→それぞれ分割されていない元の文字列がそのまま入っています。
また、B→W、W→Bの変化はない。というかシンプル元から色が揃っているので石を置く必要がありません。
そこでWBの要素数+BWの要素数-2としています。分割されていない文字列が変数WBと変数BWにそれぞれ1つずつ入っているので-2となります。
例②:s=’WB’の場合
WB = ‘ ‘ , ‘ ‘ BW = ‘WB’
W→Bへの変化が1回。B→Wへの変化は0回。変数WBは1回分割されたので要素数は2、変数BWは分割されなかったので元の文字列があり、要素数は1
合計するとlen(WB)=2、len(BW)=1 なので解答は2+1-2=1となります。
コメント