๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์ฝ”๋”ฉํ…Œ์ŠคํŠธ/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

[Javascript] ์‚ผ๊ฐ ๋‹ฌํŒฝ์ด (68645)

๋ฌธ์ œ๋งํฌ

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ์‚ผ๊ฐ ๋‹ฌํŒฝ์ด

5 [1,2,12,3,13,11,4,14,15,10,5,6,7,8,9] 6 [1,2,15,3,16,14,4,17,21,13,5,18,19,20,12,6,7,8,9,10,11]

programmers.co.kr

 

์ƒˆ๋กœ ๋ฐฐ์šด ๋‚ด์šฉ

1. Array.from()
-> Array.from() ๋ฉ”์„œ๋“œ๋Š” ์œ ์‚ฌ ๋ฐฐ์—ด ๊ฐ์ฒด(array-like object)๋‚˜ ๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด(iterable object)๋ฅผ ์–•๊ฒŒ ๋ณต์‚ฌํ•ด ์ƒˆ๋กœ์šด Array ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
Array.from(arrayLike[, mapFn[, thisArg]])โ€‹

Array(n) ๋ฐฐ์—ด์„ obj๋กœ ๊ฐ–๊ณ  ์„ ํƒ ๋งค๊ฐœ๋ณ€์ˆ˜ mapFn์„ (_, idx) => Array(idx + 1) ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ์›ํ•˜๋Š” ๋ชจ์–‘์˜ 2์ฐจ์› ๋ฐฐ์—ด์„ ์–ป์„ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. (ํ–‰์ด ์ปค์งˆ๋•Œ๋งˆ๋‹ค 1์”ฉ ์ฆ๊ฐ€ํ•˜๋Š” ์—ด์„ ๊ฐ–์Šต๋‹ˆ๋‹ค.)
(์ฒซ๋ฒˆ์งธ ์ธ์ž์ธ "_"์€ ๋ถˆํ•„์š”ํ•œ ๊ณต๊ฐ„์„ ์ฑ„์šธ ์ธ์ž๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.)


2. flatMap()
-> flatMap() ๋ฉ”์„œ๋“œ๋Š” ๋จผ์ € ๋งคํ•‘ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ๊ฐ ์—˜๋ฆฌ๋จผํŠธ์— ๋Œ€ํ•ด map ์ˆ˜ํ–‰ ํ›„, ๊ฒฐ๊ณผ๋ฅผ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด๋กœ ํ‰ํƒ„ํ™”ํ•ฉ๋‹ˆ๋‹ค. 
arr.flatMap(callback(currentValue[, index[, array]])[, thisArg])โ€‹

let arr1 = ["it's Sunny in", "", "California"];

arr1.map(x=>x.split(" "));
// [["it's","Sunny","in"],[""],["California"]]

arr1.flatMap(x => x.split(" "));
// ["it's","Sunny","in","California"]โ€‹

 

map๊ณผ flatMap์˜ ์ฐจ์ด๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ์ฝ”๋“œ ( ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ 1์ฐจ์› ๋ฐฐ์—ด๋กœ ํ‰ํƒ„ํ™” ํ•œ๋‹ค. ) 


 

function solution(n) {
  const snail = Array.from(Array(n), (_, idx) => Array(idx + 1));
  let increase = 0;
  let x = -1;
  let y = 0;
  let snailHeight = n;
    
  while (snailHeight > 0) {
    for (let i = 0; i < snailHeight; i++) snail[++x][y] = ++increase;
    for (let i = 0; i < snailHeight - 1; i++) snail[x][++y] = ++increase;
    for (let i = 0; i < snailHeight - 2; i++) snail[--x][--y] = ++increase;
    snailHeight -= 3;
  }
  return snail.flatMap((num) => num);
}