πŸ”‘ μ•Œκ³ λ¦¬μ¦˜/λ°±μ€€ JS

[λ°±μ€€] node.js/ 1463_1둜 λ§Œλ“€κΈ°

Tamii 2021. 10. 27. 09:11
λ°˜μ‘ν˜•

 

 

문제λ₯Ό 보자마자 λŠλ‚Œμ΄ μ™”λ‹€. 

μ•„ 이거.. μ•Œκ³ λ¦¬μ¦˜μ΄ ν•„μš”ν•˜λ‹€!!!!!

 

μ²˜μŒμ—λŠ” 3λΆ€ν„° λ‚˜λˆ„κ³ , 2λΆ€ν„°λ‚˜λˆ‹κ³  -1 ν•˜λ©΄ λ˜μ§€ 라고 μƒκ°ν–ˆλŠ”λ° 천만의 말씀~

νžŒνŠΈμ— λ–‘ν•˜λ‹ˆ λ‚˜μ™€ μžˆλŠ” κ°€λ₯΄μΉ¨μ„ 보고 λ°”λ‘œ λŒλ Έλ‹€.

 

 

 

 

μ°Έκ³  풀이

const fs = require('fs');

let n = (fs.readFileSync('./dev/stdin') + '').toString().trim();
n = Number(n);

const DP = new Array(n + 1).fill(0);

for (let i = 2; i <= n; i++) {
  DP[i] = DP[i - 1] + 1;

  if (i % 2 === 0) DP[i] = Math.min(DP[i], DP[i / 2] + 1);
  if (i % 3 === 0) DP[i] = Math.min(DP[i], DP[i / 3] + 1);
}
console.log(DP[n]);

ν’€μ΄λŠ” λ‹€μ΄λ‚˜λ―Ήν”„λ‘œκ·Έλž˜λ° 문제!

정말 λ‹€μ–‘ν•œ λ°©λ²•μ˜ κ°€μ§“μˆ˜λ₯Ό λ‹€ 계산해보고 μ΅œμ†Œ κ³„μ‚°μˆ˜λ₯Ό ꡬ해야 ν•˜λŠ”λ°  그러기 μœ„ν•΄μ„œλŠ” 

n의 κ³„μ‚°μˆ˜λ₯Ό κ΅¬ν•˜κΈ° μœ„ν•΄μ„œλŠ” κ·Έ μ „μ˜ κ°’λ“€μ˜ μ΅œμ†Œ κ³„μ‚°μˆ˜λ“€μ˜ μ΅œμ†Œκ°’λ“€μ„ κ²½μŸν•΄μ„œ μ˜¬λ €μ€˜μ•Ό ν•˜λŠ” κ²ƒμ΄μ—ˆλ‹€.

 

λ‹€μ΄λ‚˜λ―Ή ν”„λ‘œκ·Έλž˜λ° ν‘ΈλŠ” νŒμ—μ„œλ„ κ°„λ‹¨νžˆ μ„€λͺ…을 ν•΄λ†¨μ—ˆλŠ”λ°

 

 

문제 풀이

 

μ˜ˆμ‹œλ‘œ 10의 κ²½μš°λŠ” 두 가지 경우λ₯Ό 돌렀보고 μ΅œμ†Œκ°’μ„ κ°€μ§€κ²Œ λ˜λŠ”λ°

 

1) 9의 μ΅œμ†Œ κ³„μ‚°μˆ˜ + 1 

2) 2둜 λ‚˜λˆ μ§€λ©΄  min(2λ‘œλ‚˜λˆˆκ°’, ν˜„μž¬κ°’)  min (DP[5]+1, DP[10])

2) 3둜 λ‚˜λˆ μ§€λ©΄  min(3λ‘œλ‚˜λˆˆκ°’, ν˜„μž¬κ°’) 3으둜 λ‚˜λˆ μ§€μ§€ μ•ŠμŒ

 

μ—¬κΈ°μ„œ +1 을 ν•΄μ£ΌλŠ” μ΄μœ λŠ”

μ „μ˜ κ°’μ—μ„œ 10에 λ„λ‹¬ν•˜κΈ° μ§μ „μ˜ μ΅œμ†Œ κ³„μ‚°μˆ˜μ—λ‹€ 도달할 경우의 수(1)을 더해주기 λ•Œλ¬Έμ΄λ‹€.

 

 

< λ°˜λ³΅λ¬Έμ„ 돌며  ν™•μΈν•œ DPλ°°μ—΄

 

DP[10] μ—λŠ”

1) DP[9]+1   2+1= 3

2) DP[5]+1  4+1 = 5

쀑 μ΅œμ†Œκ°’μ΄ λ“€μ–΄κ°€κΈ°  λ•Œλ¬Έμ— 3이 λœλ‹€ 

 

 

 

 

 

 

 

 

 

 

 

πŸ₯³ μ²˜μŒμ—” μ ˆλŒ€ 이해 λͺ»ν–ˆλŠ”데 μ§€κΈˆμ€ 이해 λ˜λŠ”κ±Έ  λ³΄λ‹ˆ μ•Œκ³ λ¦¬μ¦˜ μ‹€λ ₯(이라기보닀 걍 노련함) 이 μžλΌλŠ” 쀑인가보닀!!

 

 

πŸ”— μ°Έκ³  λΈ”λ‘œκ·Έ