ABC120 C - Unification

備忘録

問題

atcoder.jp

回答

import sys
import os

ii = lambda: int(sys.stdin.buffer.readline().rstrip())
il = lambda: list(map(int, sys.stdin.buffer.readline().split()))
iln = lambda n: [int(sys.stdin.buffer.readline().rstrip()) for _ in range(n)]

iss = lambda: sys.stdin.buffer.readline().decode().rstrip()
isn = lambda n: [sys.stdin.buffer.readline().decode().rstrip() for _ in range(n)]


def main():
    if os.getenv("LOCAL"):
        sys.stdin = open("input.txt", "r")

    S = list(iss())
    z = S.count('0')
    i = S.count('1')
    print(min(z, i) * 2)


if __name__ == '__main__':
    main()

考え方

01がそれぞれ1個以上存在する場合、必ず文字列Sのどこかで01が接している箇所が存在する。
隣り合った01を除いても、除いた箇所はなかったこと(詰められる)になるので、
0または1が存在している限り、必ず接している箇所は存在している。
つまり、0または1のどちらかが無くなるまで、接する2つを取り除くことが出来るため、
min(0の数, 1の数) * 2で回答を求めることが出来る。