일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- 스탠실 버퍼 사용
- 벡터와 리스트의 차이
- c++ 정보은닉
- react native ios 기기 연결
- react native 타입스크립트
- 리액트 네이티브 맥
- Expo
- react native typescript navigate
- 스탠실 버퍼 튜토리얼
- react native typescript navigation
- GitHub
- unity stencil buffer
- node.js
- 싸이월드
- C++
- react-native
- stencil buffer
- CSS
- javascript
- html
- 스탠실 버퍼 시작
- c++ using
- react native mac
- react native typescript
- react native
- node
- react
- cyworld
- react native accessible
- 리액트 네이티브 설치 오류
Archives
- Today
- Total
혀니의 이거저거 뿌시기
백준 12782 비트 우정지수 (파이썬/그리디) 본문
728x90
12782번: 비트 우정지수
진홍이는 숫자를 좋아한다. 오늘도 숫자를 가지고 놀던 진홍이는 두 숫자의 비트 우정지수를 구해보았다. 비트 우정지수란, 10진법으로 나타낸 두 정수를 이진수로 나타내었을 때, 두 숫자를 같
www.acmicpc.net
예제 출력은 잘 됐는데 틀렸다고 나와서........
진짜 뭐가 틀렸나 계속 모르겠었는데 아주 복잡한 수를 넣어보니까 결함을 알았다.
<틀린 코드>
T = int(input())
for i in range(T):
stat = 0
result = 0
N, M = input().split()
for i in range(len(N)):
if N[i] != M[i]:
if (stat == 0):
stat = N[i]
result += 1
elif (stat != N[i]):
stat = 0
elif (stat == N[i]):
result += 1
print(result)
내가 틀렸던 이유: 기존 저 어딘가에 존재했던 0 1 쌍과 맞먹는 1 0 쌍이 나중에 나올수도 있는 건데 그 뒤에 나올 애들에 가려지면서 무조건적으로 + 1 하도록 코드를 짬.
결함 발생 원인: 처음에는 제대로 알고 있었으나 나중에 코드가 짜여졌을 때 예제를 충족시킨다는 이유로 이것을 정답이라고 생각함.
보완법:답이 안 나올 때는 아주 복잡한 예제를 생각해보거나 처음부터 문제를 다시 읽어보면서 지금 내가 생각하는 알고리즘이 틀렸지 않은가 깨끗한 뇌로 다시 생각해볼 것
<정답 코드>
t = int(input())
for _ in range(t):
n, m = map(str, input().split())
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))
설명: 그리디 알고리즘 답게 아주 탐욕스럽게 1 0 중에 가장 많이 나온것이 곧 정답이다라는 것을 알아낸 방법임
그리디 하면 우선적으로 답의 패턴들을 눈치까서 어떻게하면 정답에 해당하는 숫자가 나올것인지 생각할 것
728x90
'알고리즘 공부(C++)' 카테고리의 다른 글
[C++]프로그래머스 숫자 변환하기(BFS) (0) | 2023.06.04 |
---|---|
프로그래머스 C++ 타겟 넘버 (DFS) (0) | 2023.05.30 |
10994 별 찍기 - 19 (파이썬/재귀) (0) | 2022.10.06 |
1969 DNA (파이썬 / 브루트포스) (0) | 2022.09.29 |
백준 1021 회전하는 큐 (파이썬 / 자료구조) (0) | 2022.09.28 |