0825 TIL Tree , JSON

๋ƒํ•˜ํ˜ธํ›„ยท2021๋…„ 8์›” 25์ผ
0

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
30/101

๐Ÿ™†โ€โ™€๏ธJSON ๊ตฌ์กฐ๊ฐ€ ์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” Tree ๊ตฌ์กฐ์ž„์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค. (stringifyJSON)

๐Ÿ™†โ€โ™€๏ธJSON.stringify ์™€ JSON.parse ๊ฐ€ seriealize, deserialize๋ผ๋Š” ๊ฒƒ์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.

JSON.stringify : Object type์„ JSON์œผ๋กœ ๋ณ€ํ™˜ (serialized,์ง๋ ฌํ™”)
JSON.parse : JSON์„ Object type์œผ๋กœ ๋ณ€ํ™˜ (deserialized,์—ญ์ง๋ ฌํ™”)

๐Ÿ™†โ€โ™€๏ธJSON.stringify ์™€ JSON.parse ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ’๊ณผ JSON์„ ๋„˜๋‚˜๋“ค ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ™†โ€โ™€๏ธJSON์— ์žฌ๊ท€ ํ˜ธ์ถœ์„ ์‚ฌ์šฉํ•  ๋•Œ, ์–ด๋””์— ์‚ฌ์šฉํ•ด์•ผ ํ• ์ง€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.

null ํƒ€์ž…์€ ๊ฐ์ฒด์ด๋‹ค. ๋ฒ„๊ทธ๋ผ๋Š” ์†Œ๋ฆฌ๋„ ์žˆ๋Š”๋ฐ, ์ด๋Š” ์‚ฌ์‹ค์ด ์•„๋‹ˆ๋ผ๊ณ  ํ•œ๋‹ค. ๋ณดํ†ต ๋นˆ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

๊ฐ์ฒด์˜ value ๊ฐ’์ด undefined ๋˜๋Š” function(){}์ผ ๋•Œ, JSON.springify ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด {} ์ด ์ถœ๋ ฅ๋œ๋‹ค. ์ด๋ฅผ ๋‹ค์‹œ JSON.parseํ•ด๋„ ์›๋ž˜ ๊ฐ’์œผ๋กœ ๋Œ์•„๊ฐ€์ง€ ๋ชปํ•˜๊ณ  {}์ด ์ถœ๋ ฅ๋œ๋‹ค.

`[${[result]}]` ์™€ ๊ฐ™์€ ์‹(`[${result}]`์™€ ๊ฐ™๋‹ค)์„ ํ™œ์šฉํ•ด์„œ ๋ฐฐ์—ด์„ JSON ํ˜•ํƒœ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์ง€๋งŒ ์ถ”์ฒœ๋˜์ง€ ์•Š๋Š” ๋ฐฉ์‹์ด๋‹ค. ๋ฌธ์ž์—ด์„ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด ์ •์„์ด๋ผ๊ณ  ํ•œ๋‹ค.

`${[1, 2]}`์„ ์ž…๋ ฅํ•˜๋ฉด ๋ฐฐ์—ด์ด ํ’€๋ ค โ€œ1,2โ€๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.

๋ฌธ์ž์—ด์„ ์กฐ๊ธˆ ๋” ์ž์œ ๋กญ๊ฒŒ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ด์Šค์ผ€์ดํ”„ ์‹œํ€€์Šค๋ฅผ ์ฐพ์•„๋ณผ ์ˆ˜ ์žˆ๋‹ค. \n \', \"

DOM์— for๋ฌธ์„ ์ ์šฉํ•˜๋ฉด, ์—˜๋ฆฌ๋จผํŠธ ์ƒ์„ฑ ๋ถ€๋ถ„์ด ์žฌ์„ ์–ธ ๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋Š๊ปด์ง€์ง€๋งŒ ๋ฐ˜๋ณต๋ฌธ ์ข…๋ฃŒ์™€ ํ•จ๊ป˜ ์Šค์ฝ”ํ”„๊ฐ€ ์ข…๋ฃŒ๋˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์žฌ์„ ์–ธ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค.

Array.fill() ๋ฉ”์†Œ๋“œ๋Š” ๋ฐฐ์—ด์˜ ์‹œ์ž‘ ์ธ๋ฑ์Šค๋ถ€ํ„ฐ ๋ ์ธ๋ฑ์Šค์˜ ์ด์ „๊นŒ์ง€ ์ •์ ์ธ ๊ฐ’ ํ•˜๋‚˜๋กœ ์ฑ„์šด๋‹ค.

TOY 1๋ฒˆ

function orderOfPresentation(N, K) {
                 // ์กฐ์˜ ๊ฐœ์ˆ˜ N, ๋ฐœํ‘œ ์ˆœ์„œ K
  const factorial = (n) => {
    if (n <= 1) return 1;
    return n * factorial(n - 1);
  };

  let order = 0; // ๋ฐœํ‘œ ์ˆœ์„œ๋ฅผ ๋‹ด๋Š” ๋ณ€์ˆ˜
  
  // N๊ฐœ์˜ ์กฐ ์ค‘์—, ์–ด๋– ํ•œ ์กฐ๊ฐ€ ์ด๋ฏธ ํฌํ•จ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ๋ฐฐ์—ด์„ ๋งŒ๋“ ๋‹ค.
  // ๋งŒ์•ฝ N์ด 3์ด๋ผ๋ฉด [false, false, false, false]
  // ์ œ์ผ ์ฒซ ๋ฒˆ์งธ๋Š” ๋”๋ฏธ ๋ฐ์ดํ„ฐ(์ธ๋ฑ์Šค๋Š” 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์ง€๋งŒ ์กฐ๋Š” 1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ)
  const isUsed = Array(N + 1).fill(false);
  
  for (let i = 0; i < K.length; i++) {
    const num = K[i];
    // ์‚ฌ์šฉํ–ˆ๋Š”์ง€ ํŒ๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด isUsed์— ์ฒดํฌํ•ฉ๋‹ˆ๋‹ค. (์ค‘๋ณต์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์—)
    isUsed[num] = true;
    // num๋ณด๋‹ค ์•ž์— ์˜ฌ ์ˆ˜ ์žˆ๋Š” ์ˆ˜๋“ค์˜ ๋ฐฐ์—ด์„ ๋ณต์ œํ•ด์„œ,
    const candidates = isUsed.slice(1, num);
    // ์ด ์ค‘์—์„œ ์•„์ง ์‚ฌ์šฉ๋˜์ง€ ์•Š์€ ์ˆ˜์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•ฉ๋‹ˆ๋‹ค.
    const validCnt = candidates.filter((el) => el === false).length;
    // ์•„์ง ์‚ฌ์šฉ๋˜์ง€ ์•Š์€ ์ˆ˜, ๊ทธ ์ „๊นŒ์ง€์˜ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์นด์šดํŠธํ•ฉ๋‹ˆ๋‹ค.
    const formerCnt = validCnt * factorial(N - i - 1);
    // order์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
    order = order + formerCnt;
  }
  
  return order;
}

๋Œ์•„๊ฐ€๋Š” ๊ณผ์ •

function orderOfPresentation(N,K) {
  //N = 5 , K = [3,5,4,2,1]
   const fatorial = (n) => {
		if(n <= 1) return 1;
	  return n * factorial(n - 1);
  }

  let order = 0;
    const isUsed = Array(N + 1).fill(false);
    // [false, false, false, false, false, false]
  
  for (let i = 0; i < K.length; i++) {
    const num = K[i]; //i = 0 , num = 3
    isUsed[num] = true; // [false, false, false, true, false, false]
    const candidates = isUsed.slice(1, num); //[false,false]
    const validCnt = candidates.filter((el) => el === false).length; // 2
    const formerCnt = validCnt * factorial(N - i - 1); //2 * 4!(=24) = 48
    order = order + formerCnt; //48
  
}
  
    const num = K[i]; //i = 1 , num = 5
    isUsed[num] = true; // [false, false, false, true, false, true]
    const candidates = isUsed.slice(1, num); //[false,false,true,false]
    const validCnt = candidates.filter((el) => el === false).length; // 3
    const formerCnt = validCnt * factorial(N - i - 1); //3 * 3!(=6) = 18
    order = order + formerCnt; //48 + 18 = 66
  
}
  
    const num = K[i]; //i = 2, num = 4
    isUsed[num] = true; // [false, false, false, true, true, true]
    const candidates = isUsed.slice(1, num); //[false,false,true]
    const validCnt = candidates.filter((el) => el === false).length; // 2
    const formerCnt = validCnt * factorial(N - i - 1); //2 * 2!(=2) = 4
    order = order + formerCnt; //66 + 4 = 70
  
}
  
    const num = K[i]; //i = 3, num = 2
    isUsed[num] = true; // [false, false, true, true, true, true]
    const candidates = isUsed.slice(1, num); //[false]
    const validCnt = candidates.filter((el) => el === false).length; // 1
    const formerCnt = validCnt * factorial(N - i - 1); //1 * 1! = 1
    order = order + formerCnt; // 70 + 1 = 71
  
}
  
    const num = K[i]; //i = 4, num = 1
    isUsed[num] = true; // [false, true, true, true, true, true]
    const candidates = isUsed.slice(1, num); //[]
    const validCnt = candidates.filter((el) => el === false).length; // 0
    const formerCnt = validCnt * factorial(N - i - 1); // 0 * 0 = 0
    order = order + formerCnt; // 71 + 0 = 0
  
}
 return order; // 71
}

๋Š๋‚€ ์ 

์š”์ฆ˜ ๋„ˆ๋ฌด ์ˆ˜๋„์ฝ”๋“œ๋ฅผ ๋Œ€์ถฉ ์“ฐ๋Š”๊ฒƒ ๊ฐ™์€๋ฐ ๋‹ค์‹œ ์ˆ˜๋„์ฝ”๋“œ๋ฅผ ๊ผผ๊ผผํ•˜๊ฒŒ ์ž‘์„ฑํ•ด์•ผํ•  ๊ฒƒ ๊ฐ™๋‹ค.
์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ์ƒ๊ฐํ•ด๋‚ด๊ณ  ์ž‘์„ฑํ•˜๋Š”๊ฒŒ ๋„ˆ๋ฌด ์–ด๋ ต๋‹ค. ํ† ์ด๋„ ์žฌ๊ท€๋„ ๋งˆ์Œ์ฒ˜๋Ÿผ ์•ˆ๋˜์„œ ๋‹ต๋‹ตํ•˜๋‹ค. ์ฒด๋ ฅ์ด ๋–จ์–ด์ ธ๊ฐ€๋Š”๋ฐ ์šด๋™๋„ ํ•˜๊ณ  ์ตœ๋Œ€ํ•œ ์‰ฌ๋Š” ์‹œ๊ฐ„์„ ์ค„์—ฌ์•ผํ•  ๊ฒƒ๊ฐ™๋‹ค.
๋ฐ˜๋ณต๋งŒ์ด ์‚ด ๊ธธ์ด๋‹ค.

profile
DONE is better than PERFECT

0๊ฐœ์˜ ๋Œ“๊ธ€