fffo

문자열 - 다음 큰 숫자 본문

Programming/Algorithm

문자열 - 다음 큰 숫자

gggs 2021. 9. 23. 22:49

문제

문제 설명

자연수 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)입니다.

 

접근 및 풀이

- 주어진 n + 1부터 1씩 증가시키면서 이진수로 변환한 1의 개수를 reduce로 세어가며 비교

다른 사람 풀이

- 이진수로 변환할 때 Number 자료형의 내장 메서드 toString에 매개변수를 주면 해당 매개변수의 진수로 바뀌는 메서드가 있었다 

let num = 5;
let binary_num = num.toStirng(2); // '101'

 

코드

function solution(n) {
  let answer = n+1;
  while (countOne(n) != countOne(answer)) {
    answer++;
  }
  return answer;

  function countOne(num) {
    let binaryN = [];
    while (num != 0) {
      binaryN.unshift(num % 2);
      num = parseInt(num / 2);
    }
    let result = binaryN.reduce((acc,cur)=>{
      return cur === 1 ? acc + 1 : acc;
    },0);
    return result;
  }
}

출처

https://programmers.co.kr/learn/courses/30/lessons/12911

'Programming > Algorithm' 카테고리의 다른 글

문자열 - 올바른 괄호  (0) 2021.09.24
해시 테이블  (0) 2021.09.24
스택/큐 - 다리를 지나는 트럭  (0) 2021.09.23
우선순위 큐와 힙  (0) 2021.09.23
탐색  (0) 2021.09.22
Comments