πŸ‘©‍πŸ’»/JavaScript

[Programmers] μ†Œμˆ˜ μ°ΎκΈ°, μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체

ν•œλ‚˜ 2021. 2. 20. 16:37

문제

1λΆ€ν„° μž…λ ₯받은 숫자 n 사이에 μžˆλŠ” μ†Œμˆ˜μ˜ 개수λ₯Ό λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜, solution을 λ§Œλ“€μ–΄ λ³΄μ„Έμš”.

μ†Œμˆ˜λŠ” 1κ³Ό 자기 μžμ‹ μœΌλ‘œλ§Œ λ‚˜λˆ„μ–΄μ§€λŠ” 수λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€.
(1은 μ†Œμˆ˜κ°€ μ•„λ‹™λ‹ˆλ‹€.)

μ œν•œ 쑰건

  • n은 2이상 1000000μ΄ν•˜μ˜ μžμ—°μˆ˜μž…λ‹ˆλ‹€.

μ½”λ“œ

풀이

주어진 μˆ«μžκ°€ λ°°μ—΄ ν˜•νƒœκ°€ μ•„λ‹ˆλ―€λ‘œ, 첫 번째둜 λ°˜λ³΅λ¬Έμ„ λ“±μž₯μ‹œμΌœμ„œ μ†Œμˆ˜λ₯Ό μ°ΎκΈ° μœ„ν•œ 숫자 집합을 λ§Œλ“€μ–΄μ€€λ‹€. 1은 μžμ—°μŠ€λŸ½κ²Œ μ œμ™Έκ°€ λ˜λ‹ˆ 2λΆ€ν„° μ‹œμž‘ν•΄ nκΉŒμ§€ 배열에 λ„£μ–΄μ€€λ‹€.
μ΄λ•Œ arr[0], arr[1]은 μ±„μ›Œμ§€μ§€ μ•Šμ•„μ„œ undefined이 될 κ²ƒμ΄μ§€λ§Œ, κ΅¬ν•˜λŠ” 것은 μ†Œμˆ˜μ˜ κ°œμˆ˜μ΄λ―€λ‘œ filter λ©”μ„œλ“œλ₯Ό ν†΅ν•΄μ„œ μ§€μ›Œλ‚˜κ°ˆ 수 μžˆλ‹€.

λ§Œλ“€μ–΄μ§„ 배열을 μˆœνšŒν•˜λ©΄μ„œ μ†Œμˆ˜κ°€ μ•„λ‹Œ μˆ˜λ“€μ„ μ œκ±°ν•΄μ€„ λͺ©μ μœΌλ‘œ 0을 λ„£μ–΄μ€€λ‹€. i = 2일 λ•Œ, iλ²ˆμ§Έμ— μœ„μΉ˜ν•œ λ°°μ—΄μ˜ μ›μ†Œκ°€ 0일 경우 continue둜 λ‹€μŒ forλ¬Έ μ½”λ“œ μ§„ν–‰μœΌλ‘œ λ„˜μ–΄κ°„λ‹€. λ°°μ—΄μ˜ μΈλ±μŠ€μ™€ ν•΄λ‹Ή μ›μ†Œμ˜ 값은 λ™μΌν•œ μˆ«μžμ΄λ―€λ‘œ, i + iλŠ” i의 배수, μ†Œμˆ˜κ°€ μ•„λ‹ˆλ―€λ‘œ 0으둜 λ§Œλ“€μ–΄μ£Όκ³ , λ‹€μ‹œ 여기에 iλ₯Ό 더해 λ‹€μŒ 번 μ›μ†Œ 값을 νƒμƒ‰ν•œλ‹€.

μ½”λ“œ κ°œμ„ 

빈 배열을 λ§Œλ“€κ³  여기에 ν•˜λ‚˜μ”© 숫자λ₯Ό λ„£μ–΄ 배열을 μ±„μš°λŠ” 방법도 μžˆμ§€λ§Œ, μ°¨λ‘€ μ°¨λ‘€ μ¦κ°€ν•˜λŠ” 숫자λ₯Ό λ°°μ—΄ν™”ν•˜λŠ” κΉ”λ”ν•œ μ½”λ“œλ„ μžˆλ‹€. ES6 λ¬Έλ²•μ—μ„œ Array from()κ³Ό keys() λ©”μ†Œλ“œλ₯Ό μ“Έ 수 μžˆλ‹€.

Array.from(Array(10).keys())

// spread operatorλ₯Ό μ΄μš©ν•΄ 더 짧게 ν‘œν˜„ν•˜λ©΄ μ•„λž˜μ™€ κ°™λ‹€. 

let s = [...Array(10).keys()] 
console.log(s)

/* expected : [
  0, 1, 2, 3, 4,
  5, 6, 7, 8, 9
] 
*/

μœ„ μ½”λ“œλŠ” 항상 0λΆ€ν„° μ±„μ›Œλ‚˜κ°€κΈ° λ•Œλ¬Έμ— 만일 1λΆ€ν„° μ‹œμž‘ν•˜λ„λ‘ ν•œλ‹€λ©΄, μ•„λž˜μ²˜λŸΌ 써볼 수 μžˆμ„ 것이닀.

let s = [...Array(10).keys()].map(el => ++el);

// or

let s = Array.from(Array(10), (e, i) => ++i)
let s = Array.from({ length: n }, (e, i) => ++i) // μœ„μ™€ λ™μΌν•˜λ‹€.

Array.from(arrayLike[, mapFn[, thisArg]])

  • arrayLike : λ°°μ—΄λ‘œ λ³€ν™˜ν•˜κ³ μž ν•˜λŠ” μœ μ‚¬ λ°°μ—΄ κ°μ²΄λ‚˜ 반볡 κ°€λŠ₯ν•œ 객체
  • mapFn : λ°°μ—΄μ˜ λͺ¨λ“  μš”μ†Œμ— λŒ€ν•΄ ν˜ΈμΆœν•  맀핑 ν•¨μˆ˜
  • thisArg : mapFun μ‹€ν–‰ μ‹œ this둜 μ‚¬μš©ν•  κ°’

좜처

MDN Array.from()
How to create an array containing 1 .. N