ν‹°μŠ€ν† λ¦¬ λ·°

문제

문제 μ„€λͺ…

μžμ—°μˆ˜ 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 μ΄ν•˜μ˜ μžμ—°μˆ˜ μž…λ‹ˆλ‹€.

μž…μΆœλ ₯ 예

nresult

78 83
15 23

μž…μΆœλ ₯ 예 μ„€λͺ…

μž…μΆœλ ₯ 예#1
문제 μ˜ˆμ‹œμ™€ κ°™μŠ΅λ‹ˆλ‹€.
μž…μΆœλ ₯ 예#2
15(1111)의 λ‹€μŒ 큰 μˆ«μžλŠ” 23(10111)μž…λ‹ˆλ‹€.

 

λ¬Έμ œν’€μ΄

  • 10μ§„μˆ˜λ₯Ό 2μ§„μˆ˜λ‘œ λ°”κΏ”μ£ΌκΈ° μœ„ν•΄ 반볡문으둜 ν•΄λ‹Ή 값을 2둜 계속 λ‚˜λˆˆ λ‚˜λ¨Έμ§€ 값을 μž„μ‹œ 배열에 적재
  • 쑰건 2인 1의 갯수λ₯Ό 비ꡐ해주기 μœ„ν•΄ String.match()λ₯Ό μ‚¬μš©ν•˜μ—¬ μ •κ·œν‘œν˜„μ‹μœΌλ‘œ 식별 ν•œ κ°’λ§Œμ„ 배열에 적재

μ½”λ“œ

function exportOneNum(n) {
  let tmpArr = [];
  let regExp = /[1]/g;
  
  while(n) {
    tmpArr.push(n % 2);
    n = parseInt(n / 2);
  }
  let oneNum = 0;
  oneNum = tmpArr.reverse().join('').match(regExp).length;
  return oneNum;
}

function solution(n) {
  let targetNum = n;
  let target = exportOneNum(targetNum);
  
  while(targetNum) {
    targetNum++;
    let next = exportOneNum(targetNum);
    if(next === target) return targetNum;
  }
}

 

μ˜€λ‹΅

λͺ‡ 개의 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€μ—μ„œ μ‹œκ°„ 초과둜 인해 였λ₯˜ μ²˜λ¦¬λ˜μ—ˆλ‹€.

 

μ–΄λ””μ„œ μ—°μ‚° μ‹œκ°„μ΄ 였래 걸렸을지 κ³ λ―Όν•˜λ‹€κ°€, 2μ§„μˆ˜λ‘œ λ³€ν™˜ν•˜λŠ” κ³Όμ •μ—μ„œ μ‹œκ°„ λ³΅μž‘λ„κ°€ λ†’μ•˜μ„ κ±°λΌλŠ” 생각에 λ‹€λ₯Έ 방법을 μ°Ύμ•„λ³΄μ•˜λ‹€.

 

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Object/toString

 

Object.prototype.toString() - JavaScript | MDN

The toString() μ€ λ¬Έμžμ—΄μ„ λ°˜ν™˜ν•˜λŠ” object의 λŒ€ν‘œμ μΈ 방법이닀

developer.mozilla.org

숫자 및 BigInts의 경우 toString()은 μ„ νƒμ μœΌλ‘œ 기수(radix)λ₯Ό λ§€κ°œλ³€μˆ˜λ‘œ μ·¨ν•©λ‹ˆλ‹€. 기수의 값은 μ΅œμ†Œ 2λΆ€ν„° 36κΉŒμ§€μž…λ‹ˆλ‹€.

 

toString() 인자 κ°’μœΌλ‘œ 기수λ₯Ό λ„£μ–΄μ£Όλ©΄ ν•΄λ‹Ή 기수 값에 λ”°λ₯Έ μƒμ΄ν•œ 값을 얻을 수 μžˆμŒμ„ ν™•μΈν•˜μ˜€κ³  이λ₯Ό μ΄μš©ν•˜κΈ°λ‘œ ν•˜μ˜€λ‹€.

 

μ½”λ“œ

function exportOneNum(n) {
  let regExp = /[1]/g;
  let binaryN = n.toString(2);  
  let oneNum = 0;
  
  oneNum = binaryN.match(regExp).length;
  return oneNum;
}

function solution(n) {
  let targetNum = n;
  let target = exportOneNum(targetNum);
  
  while(targetNum) {
    targetNum++;
    let next = exportOneNum(targetNum);
    if(next === target) return targetNum;
  }
}

 

 

λŒ“κΈ€
곡지사항
μ΅œκ·Όμ— 올라온 κΈ€
μ΅œκ·Όμ— 달린 λŒ“κΈ€
Total
Today
Yesterday
링크
TAG
more
Β«   2024/10   Β»
일 μ›” ν™” 수 λͺ© 금 ν† 
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
κΈ€ 보관함