12911 - 다음 큰 숫자
😄 문제 설명
Description
자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음과 같이 정의 합니다.
- 조건 1. n의 다음 큰 숫자는 n보다 큰 자연수 입니다.
- 조건 2. n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 갯수가 같습니다.
- 조건 3. n의 다음 큰 숫자는 조건 1, 2를 만족하는 수 중 가장 작은 수 입니다.
예를 들어서 78(1001110)의 다음 큰 숫자는 83(1010011)입니다.
자연수 n이 매개변수로 주어질 때, n의 다음 큰 숫자를 return 하는 solution 함수를 완성해주세요.
제한 사항
n은 1,000,000 이하의 자연수 입니다.
입출력 예
n | result |
---|---|
78 | 83 |
15 | 23 |
입출력 예 설명
입출력 예#1
문제 예시와 같습니다.
입출력 예#2
15(1111)의 다음 큰 숫자는 23(10111)입니다.
출처 https://programmers.co.kr/learn/courses/30/lessons/12911
💻 Javascript 코드
function solution(n) {
const countOne = (dec) => {
const tmp = [];
let count = 0;
if (dec === 0) {
for (let i = 0; i < n; i++) {
tmp.push(0);
}
} else {
while (dec > 1) {
tmp.unshift(dec % 2);
dec = Math.floor(dec / 2);
}
tmp.unshift(1);
}
tmp.map((item) => {
if (item === 1) {
count++;
}
});
return count;
};
const tmp = countOne(n);
var answer = 0;
for (let i = n + 1; i <= 1000000; i++) {
if (tmp === countOne(i)) {
answer = i;
break;
}
}
return answer;
}
💻 Python 코드
def change_to_binary(decimal_num) : # 십진수를 이진수로 바꾸기
binary_list = []
while decimal_num > 1 :
binary_list.append(decimal_num % 2)
decimal_num = decimal_num // 2
binary_list.append(decimal_num)
return reversed(binary_list)
def count_num_of_one(n) : # 이진수에서 1의 개수 세기
count = 0
binary = change_to_binary(n)
for b in binary :
if b == 1 :
count += 1
return count
def solution(n):
answer = n + 1
num_of_one = count_num_of_one(n)
while 1 :
if count_num_of_one(answer) == num_of_one :
break
answer += 1
return answer
💡 문제 해결 방법
우아한테크코스 프리코스를 진행한 이후로 함수 분리 연습을 하고있다. 하나의 함수보다 하나의 기능을 하는 여러 함수로 코드를 구현하는게 훨씬 깔끔하고 이해하기 쉬운 것 같다. 문제 해결 방법은 다음과 같다.
change_to_binary()
함수를 통해 십진수인 n을 이진수로 바꾼다.count_num_of_one()
함수를 통해 이진수에서 1의 개수를 count한다.- n에서부터 1을 더해가며
count_num_of_one()
함수를 통해 1의 개수를 센다. - 1의 개수가 같다면 while문을 빠져나온다.
처음에는 문제를 보고 바뀐 이진수에서 1의 개수가 같으면서 그 중에서 제일 작은 수를 구하는 방법을 구현하려 했으나, 이를 구현하기 위한 아이디어가 딱히 떠오리지 않아서 위와 같은 방법으로 해결하였다.
Author And Source
이 문제에 관하여(12911 - 다음 큰 숫자), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@gus7wn/12911-다음-큰-숫자저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)