문제
자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음과 같이 정의 합니다.
- n의 다음 큰 숫자는 n보다 큰 자연수 입니다.
- n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 갯수가 같습니다.
- n의 다음 큰 숫자는 조건 1, 2를 만족하는 수 중 가장 작은 수 입니다.
예를 들어서 78(1001110)의 다음 큰 숫자는 83(1010011)입니다.
자연수 n이 매개변수로 주어질 때, n의 다음 큰 숫자를 return 하는 solution 함수를 완성해주세요.
- 제한 사항
n은 1,000,000 이하의 자연수 입니다.
나의 풀이
function solution(n) {
let answer = n + 1;
n = n.toString(2).split('');
let nCount = n.filter(v => v === '1').length;
while(true) {
let count = answer.toString(2).split('').filter(v => v === '1').length;
if(count === nCount) return answer;
else answer ++;
}
}
처음에는 이진수로 바꾼 후, 규칙을 찾으려고 해서 방향을 완전히 잘못 잡았다.
구현은 크게 어렵지 않았다.
정확도 테스트 결과
효율성 테스트 결과
다른 풀이
function solution(n) {
let count = n.toString(2).match(/1/g).length;
while(n++) {
if(n.toString(2).match(/1/g).length === count) return n;
}
}
정규식을 사용하자 코드 길이가 줄어들었다.
그리고 어차피 n에서 1을 증가하고 시작해야하니 while의 조건문에 증감자를 사용했다.
여러모로 많은 것을 배운 코드.
정확도 테스트 결과
효율성 테스트 결과
참고
www.zerocho.com/category/Algorithm
'Coding test' 카테고리의 다른 글
[프로그래머스] 최댓값과 최솟값 (Lv 2) - javascript (0) | 2022.05.19 |
---|---|
[프로그래머스] 숫자의 표현 (Lv 2) - javascript (0) | 2022.05.19 |
[프로그래머스] 올바른 괄호 (Lv 2) - javascript (0) | 2022.05.17 |
[프로그래머스] 124 나라의 숫자 (Lv 2) - javascript (0) | 2022.05.17 |
[프로그래머스] 위장 (Lv 2) - javascript (0) | 2022.05.17 |