728x90
반응형
https://www.acmicpc.net/problem/12782
문제의 접근 방법
- 이진수 n과 이진수 m을 문자 하나씩 비교해서 문자가 다를 경우를 체크해주기
- n이나 m 둘 중 하나를 기준점으로 삼아서 문자가 다를 경우에 그게 0인지 1인지 체크해서 총 몇 개인지 계산해주기
- 그 두 값중 더 큰 수가 바로 최소 연산횟수!
내가 막혔던 부분
- 기본적인 아이디어를 생각하지 못했음.
내가 생각한 아이디어: 두 수가 같지 않으면 무조건 한 번은 바꿔야 하기 때문에 1을 카운트 해주고, 그 후 1을 기준점으로 삼아서 1의 개수가 다르면 각 이진수 n, m이 가지고 있는 1의 개수들의 차이를 카운트해서 더해주는 것이 최소 연산 횟수라고 생각했다.
### 처음 내가 짰던 오답 코드 ###
T = int(input())
for _ in range(T):
result = 0
n,m = input().split()
n = list(n)
m = list(m)
if n != m:
result += 1
if n.count('1') != m.count('1'):
result += abs(n.count('1') - m.count('1'))
print(result)
문제 풀이 방법
(1) 테스트 케이스 T 입력 받기
(2) 이진수 두 개 n,m을 문자열로 입력 받기
(3) 이진수 1과 0을 각각 몇 번씩 바꿔야 하는지 개수를 세서 저장해줄 변수 one, zero 선언하기
(4) 만약 이진수 n의 i번째 요소가 m의 i번째 요소와 다르다면 n을 기준으로 m의 i번째 값이 (0->1)로 바뀌어야 하는지, 아니면 (1->0)으로 바꿔야 하는지 판별해서 바꿔야 하는 수(one or zero)에 1씩 카운트 해주기
(5) (4) 과정을 이진수(문자열) 길이만큼 반복하기
(6) 바꿔야 하는 횟수 one 이나 zero 두 개를 비교해서 더 큰 수를 출력해주기
소스코드
T = int(input())
for _ in range(T):
n,m = map(str, input().split())
one = 0
zero = 0
for i in range(len(n)):
if n[i] != m[i]:
if m[i] == '1':
one += 1
else:
zero += 1
print(max(one, zero))
728x90
반응형
'백준 write-up > 정렬 & 그리디' 카테고리의 다른 글
[백준] 생일 : 5635번 - Python (0) | 2022.06.09 |
---|---|
[백준] 동일한 단어 그룹화하기 : 16499번 - Python (0) | 2022.06.08 |
[백준] 이장님 초대 : 9237번 - Python (0) | 2022.06.04 |
[백준] 사과나무 : 19539번 - Python (0) | 2022.06.03 |
[백준] Yangjojang of The Year : 11557번 - Python (0) | 2022.06.02 |