1463 1λ‘œλ§Œλ“€κΈ° πŸ‘Š

Veloger_97Β·2021λ…„ 5μ›” 2일
0
post-thumbnail

문제

μ •μˆ˜ X에 μ‚¬μš©ν•  수 μžˆλŠ” 연산은 λ‹€μŒκ³Ό 같이 μ„Έ κ°€μ§€ 이닀.

1. Xκ°€ 3으둜 λ‚˜λˆ„μ–΄ λ–¨μ–΄μ§€λ©΄, 3으둜 λ‚˜λˆˆλ‹€.
2. Xκ°€ 2둜 λ‚˜λˆ„μ–΄ λ–¨μ–΄μ§€λ©΄, 2둜 λ‚˜λˆˆλ‹€.
3. 1을 λΊ€λ‹€.

μ •μˆ˜ N이 μ£Όμ–΄μ‘Œμ„ λ•Œ, μœ„μ™€ 같은 μ—°μ‚° μ„Έ 개λ₯Ό 적절히 μ‚¬μš©ν•΄μ„œ 1을 λ§Œλ“€λ €κ³  ν•œλ‹€. 연산을 μ‚¬μš©ν•˜λŠ” 횟수의 μ΅œμ†Ÿκ°’μ„ 좜λ ₯ν•˜μ‹œμ˜€.

μž…λ ₯

첫째 쀄에 1보닀 ν¬κ±°λ‚˜ κ°™κ³ , 10^6보닀 μž‘κ±°λ‚˜ 같은 μ •μˆ˜ N이 μ£Όμ–΄μ§„λ‹€.

좜λ ₯

첫째 쀄에 연산을 ν•˜λŠ” 횟수의 μ΅œμ†Ÿκ°’μ„ 좜λ ₯ν•œλ‹€.

예제 μž…λ ₯1

2

예제 좜λ ₯1

1

예제 μž…λ ₯2

10

예제 좜λ ₯2

3

μ½”λ“œ

βœ” 이전에 κ΅¬ν–ˆλ˜ 값듀을 배열에 계속 μ €μž₯ν•¨μœΌλ‘œμ¨ κ΅¬ν–ˆλ˜ 값듀에 +1을 ν•˜λŠ” λ°©μ‹μœΌλ‘œ κ΅¬ν•œλ‹€.

const readline = require("readline");
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

rl.on("line", function (line) {
  const num = Number(line); // λ°°μ—΄ 크기λ₯Ό λ§Œλ“€κΈ° μœ„ν•΄ μž…λ ₯ 받은 κ°’ 숫자둜 ν˜•λ³€ν™˜
  const arr = new Array(num + 1).fill(0); // μž…λ ₯받은 크기만큼 λ°°μ—΄ 곡간 λ§Œλ“€κ³  0으둜 μ΄ˆκΈ°ν™”

  for (let i = 2; i <= num; i++) {
    arr[i] = arr[i - 1] + 1; // arr[2]에 1λŒ€μž…

    if (i % 2 === 0) {
      // iκ°€ 2둜 λ‚˜λˆ„μ–΄ λ–¨μ–΄μ§€λ©΄
      arr[i] = Math.min(arr[i], arr[i / 2] + 1); // μœ„μ—μ„œ λŒ€μž…ν•œ  1(arr[i])κ³Ό 0(arr[2/2]+1)을 λΉ„κ΅ν•΄μ„œ μž‘μ€ 값을 arr[2]에 λŒ€μž…
    }

    if (i % 3 === 0) {
      // iκ°€ 3으둜 λ‚˜λˆ„μ–΄ λ–¨μ–΄μ§€λ©΄
      arr[i] = Math.min(arr[i], arr[i / 3] + 1); // μœ„μ˜ μ½”λ“œμ™€ λ§ˆμ°¬κ°€μ§€ (3으둜 λ‚˜λˆ„μ–΄μ‘Œλ˜ κ³Όκ±° μˆ«μžλ“€μ„ μ°Ύμ•„μ•Όλ˜λ―€λ‘œ i/3)
    }
  }
  console.log(arr[num]);
}).on("close", function () {
  process.exit();
});


profile
ν”„λ‘ νŠΈμ—”λ“œ κ°œλ°œμžκ°€ 되고 μ‹Άμ–΄μš” πŸ™†β€β™‚οΈ

0개의 λŒ“κΈ€