문제풀이/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 중 개수가 더 적은 것은 모두 자리를 교환하는 것으로 하고, 남는 것만 숫자를 아예 바꾸는 연산을 실행한다고 생각하면 된다.