문제
풀이
이진수로 변환하는 방법을 알면 간단히 풀 수 있다.
전체적인 과정은 다음과 같다.
1. 먼저 처음 수와 그 수보다 1 큰 수를 선언한다.
2. 두 수를 이진수로 변환해서 1의 개수를 세는 함수에 입력한다.
3. 1의 개수가 일치하면 반복을 종료하고 일치하지 않으면 수를 1증가시킨다.
tmp = n + 1
처음 수는 n으로 받아오고 n보다 1 큰 수를 정의하였다.
def calOneNum(num1, num2):
tranNum1 = deque()
cntNum1 = 0
cntNum2 = 0
while num1 > 0:
if (num1 % 2 == 1):
cntNum1 += 1
num1 //= 2
while num2 > 0:
if (num2 % 2 == 1):
cntNum2 += 1
num2 //= 2
if cntNum1 == cntNum2:
return True
return False
두 수를 입력받아 2진수로 변환 후 1의 개수를 비교하는 함수이다.
while문을 사용하여 2진수로 변환하는데 이 때 1로 변환되면 cnt를 증가시켜준다.
최종적으로 두 수의 cnt값이 일치하다면 1의 개수가 동일하다는 것을 의미한다.
while True:
if calOneNum(n, tmp):
break
else:
tmp += 1
return tmp
메인함수의 반복문이다.
두 수를 입력해서 1의 개수가 일치하면 break한뒤 tmp를 return하고
아니라면 tmp에 1을 증가시켜 반복문을 계속한다.
코드
from collections import deque
def solution(n):
answer = 0
tmp = n + 1
while True:
if calOneNum(n, tmp):
break
else:
tmp += 1
return tmp
def calOneNum(num1, num2):
tranNum1 = deque()
cntNum1 = 0
cntNum2 = 0
while num1 > 0:
if (num1 % 2 == 1):
cntNum1 += 1
num1 //= 2
while num2 > 0:
if (num2 % 2 == 1):
cntNum2 += 1
num2 //= 2
if cntNum1 == cntNum2:
return True
return False
'알고리즘' 카테고리의 다른 글
[백준 kotlin] 3372 보드 점프 (0) | 2024.06.17 |
---|---|
[백준 python] 1926 그림 (0) | 2024.05.30 |
[백준 kotlin] 1956 운동 (0) | 2024.05.27 |
[백준 kotlin] 17609 회문 (0) | 2024.05.25 |
[프로그래머스 kotlin] 보석 쇼핑 (0) | 2024.05.19 |