\(@^0^@)/

[JS] λ°±μ€€ 4673번 μ…€ν”„ λ„˜λ²„ λ³Έλ¬Έ

μ•Œκ³ λ¦¬μ¦˜

[JS] λ°±μ€€ 4673번 μ…€ν”„ λ„˜λ²„

minjuuu 2021. 10. 2. 23:10
728x90

🐱‍πŸ‘“ 1. 문제 : 4673

https://www.acmicpc.net/problem/4673


πŸ”₯ 2. 풀이 + μ½”λ“œ

// μž…λ ₯λ°›λŠ” κ°’ μ—†μŒ

// μ…€ν”„λ„˜λ²„ : μƒμ„±μžκ°€ μ—†λŠ” 수

// 33은 39의 μƒμ„±μž, 39λŠ” 51의 μƒμ„±μž, 51은 57의 μƒμ„±μž
// 33 => 33 + 3 + 3 = 39 => 39 + 3 + 9 + = 51 => 51 + 5 + 1 = 57
// 101은 μƒμ„±μžκ°€ 2개 (91κ³Ό 100)
// 91 => 91 + 9 + 1 = 101 , 100 => 100 + 1 + 0 + 0 = 101

// 0. 각 자리수λ₯Ό λ”ν•˜λŠ” ν•¨μˆ˜λ₯Ό λ§Œλ“ λ‹€.
// 1. 10,000개의 falseλ₯Ό 가진 배열을 λ§Œλ“€μ–΄μ„œ
// 2. μƒμ„±μžλ₯Ό κ°–λŠ” μˆ«μžλ“€μ„ true둜 λ³€κ²½ν•΄μ€€λ‹€.
// 3. 그리고, 배열을 λŒλ©΄μ„œ trueκ°€ μ•„λ‹Œ 것 !true(μ…€ν”„λ„˜λ²„)만 좜λ ₯ν•˜λ©΄ 됨.

function d(n) {
  // ex) 값이 52라면
  let num = n;
  let sum = num; // 52

  while(num > 0) {
    // μœ„μ˜ sumμ—μ„œ 52받아와 + 되고,
    sum += num % 10; // num % 10 = 2 μ—¬μ„œ 총 54
    num = parseInt(num / 10); // 5
  }
  return sum;
}

const range = 10000;
const selfNumArr = new Array(range);
// 10000개의 숫자λ₯Ό 넣은 배열을 생성 (μ΄ˆκΈ°κ°’μ€ false둜)
selfNumArr.fill(false);

for (let i = 1; i <= range; i++) {
  // d(i)의 μˆ«μžλ“€μ€ true둜 λ³€κ²½
  selfNumArr[d(i)] = true;
  if (!selfNumArr[i]) {
    // false인 μ…€ν”„λ„˜λ²„λ§Œ 좜λ ₯
    console.log(i)
  }
}

 

λ²Œμ¨λΆ€ν„° μ΄λ ‡κ²Œ μ–΄λ €μš°λ©΄.... λ‚˜λ¨Έμ§€λ“€μ€ μ–΄λ–»κ²Œ ν‘ΈλŠ” κ±°μ•Ό? λ‹€λ“€ μ–΄λ–»κ²Œ ν‘ΈλŠκ±°μ•Όγ… γ… γ… γ… 

728x90