코딩 테스트/Level 2
21. 다음 큰 숫자
컴닥
2020. 8. 4. 14:56
반응형
https://programmers.co.kr/learn/courses/30/lessons/12911
연습문제 4563명 완료
코딩테스트 연습 - 다음 큰 숫자
자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음과 같이 정의 합니다. 조건 1. n의 다음 큰 숫자는 n보다 큰 자연수 입니다. 조건 2. n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 갯수가 같습니
programmers.co.kr
Python
def solution(n):
n_count = bin(n).count('1')
n += 1
while bin(n).count('1') != n_count:
n += 1
return n
테스트 1 〉 통과 (0.04ms, 10.7MB)
테스트 2 〉 통과 (0.04ms, 10.7MB)
테스트 3 〉 통과 (0.04ms, 10.7MB)
테스트 4 〉 통과 (0.03ms, 10.7MB)
테스트 5 〉 통과 (0.04ms, 10.7MB)
테스트 6 〉 통과 (0.03ms, 10.7MB)
bin함수와 count 함수를 안다면 어렵지 않을 것 같습니다.
bin 함수는 숫자를 2진수 표기(문자열)로 바꿔줍니다.
count 함수는 list 등에서 사용할 수 있는 것처럼 문자열에서도 사용할 수 있습니다. 대부분의 언어에서 문자열은 char array 비스무리하게 처리해 주죠? https://wikidocs.net/14#x-count
저의 코드는 아닙니다만, 재귀를 사용하면 한 줄로 줄일 수도 있습니다. 키워드 인수를 이용해서 초기값을 전달하는 쌘쓰
https://dojang.io/mod/page/view.php?id=2346
def solution(n, n_count=0):
return n if (bin(n).count('1') == n_count) else \
solution(n+1, bin(n).count('1') if (n_count is 0) else n_count)
테스트 1 〉 통과 (0.05ms, 10.7MB)
테스트 2 〉 통과 (0.04ms, 10.7MB)
테스트 3 〉 통과 (0.06ms, 10.8MB)
테스트 4 〉 통과 (0.04ms, 10.7MB)
테스트 5 〉 통과 (0.04ms, 10.6MB)
테스트 6 〉 통과 (0.04ms, 10.7MB)
JS
function solution(n) {
num = n.toString(2).split('').reduce((a, b) => a = parseInt(a) + parseInt(b))
do {
n++
} while (num == n.toString(2).split('').reduce((a, b) => a = parseInt(a) + parseInt(b)))
return n;
}
C#
using System;
using System.Linq;
internal class Solution
{
public int solution(int n)
{
int temp = Convert.ToString(n, 2).Where(a => a == '1').Count();
for (n = n + 1; temp != Convert.ToString(n, 2).Where(a => a == '1').Count(); n ++){}
return n;
}
}
Java
class Solution {
public int solution(int n) {
int num = Integer.bitCount(n);
while (num != Integer.bitCount(++n)) {}
return n;
}
}
반응형