728x90
반응형
문제
https://www.acmicpc.net/problem/12782
해설
이 문제는 입력받은 두 이진수를 같게 만드는 최소 횟수를 구하는 문제이다.
두 이진수를 같게 만드는 방법은 두가지가 있다.
- 하나의 이진수에서 임의의 자리의 숫자를 0 또는 1로 바꾼다.
- 하나의 이진수에서 서로 다른 자리에 있는 두 숫자의 위치를 바꾼다.
이거 자체를 코드로 표현하려고 하면 어렵다.
머리를 좀 써보면,
이진수1(n)과 이진수2(m)를 문자 하나씩 비교를 해서 문자가 다를 경우를 체크해주는 것이다.
n이나 m 둘 중 하나를 기준으로 잡고,
문자가 다를 경우,
그 문자가 0(zero)인지 1(one)인지를 체크하여 그에 맞는 변수의 값을 +1 해주는 것이다.
직접 손으로 케이스를 비교해가면서 횟수를 세보면
one과 zero 중 큰 수가 최소 연산 횟수가 된다는 것을 알 수 있다.
코드
-파이썬
#백준 12782(비트 우정지수)
import sys
input = sys.stdin.readline
t = int(input()) #테스트 케이스 개수
for _ in range(t):
n, m = map(str, input().split()) # 이진수1, 이진수2
one = 0
zero = 0
for i in range(len(m)):
if n[i] != m[i]:
if m[i] == '1':
one += 1
else:
zero += 1
print(max(one, zero))
-자바
//백준 12782(비트 우정지수)
import java.util.*;
import java.io.*;
public class Boj_12782 {
public static void main(String[] args) throws IOException{
Scanner sc = new Scanner(System.in);
int t = sc.nextInt(); //테스트 케이스 개수
for (int i = 0; i < t; i++) {
String n = sc.next(); //이진수 1
String m = sc.next(); //이진수 2
int one = 0;
int zero = 0;
for (int j = 0; j < m.length(); j++) {
if (n.charAt(j) != m.charAt(j)) {
if(m.charAt(j) == '1') {
one ++;
}
else {
zero ++;
}
}
}
System.out.println(Math.max(one, zero));
}
}
}
728x90
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[파이썬, 자바] BOJ_11256(사탕) (0) | 2021.02.03 |
---|---|
[파이썬, 자바] BOJ_18238(ZOAC 2) (0) | 2021.02.02 |
[파이썬, 자바] BOJ_14916(거스름돈) (0) | 2021.01.29 |
[파이썬, 자바] BOJ_1439(뒤집기) (0) | 2021.01.28 |
[파이썬, 자바] BOJ_3052(나머지) (0) | 2021.01.27 |