문제풀이/Greedy

[Python/파이썬] 백준 12782번 비트 우정지수

딜레이레이 2025. 4. 25. 23:38

https://www.acmicpc.net/problem/12782

코드

for _ in range(int(input())):
    n, m = input().split()
    zero = 0
    one = 0
    for i in range(len(n)):
        if n[i] != m[i]:
            if n[i] == '0':
                zero += 1
            else:
                one += 1
    print(max(zero, one))

 

두 숫자가 다른 부분(`n[i] != m[i]`) 중 n[i]가 0인 경우와 1인 경우의 수를 각각 센 뒤에, 둘 중 큰 값이 최소 연산 횟수다. 왜냐하면 숫자를 각각 교환하기보다는 0과 1의 위치를 바꾸는 연산을 최대한 많이 하는 것이 연산 횟수를 최소한으로 줄이는 방법이기 때문이다. 그렇기 때문에 0과 1 중 개수가 더 적은 것은 모두 자리를 교환하는 것으로 하고, 남는 것만 숫자를 아예 바꾸는 연산을 실행한다고 생각하면 된다.