ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • ๋ฌธ์ œ 96. ๋„“์€ ํ…ƒ๋ฐญ ๋งŒ๋“ค๊ธฐ
    ๐Ÿง  codingtest/javascript 100์ œ 2022. 4. 29. 11:32
    728x90

     

     

     

    ์˜ˆ๋ฆผ์ด๋Š” ๊ท€๋†์„ ํ•ด์„œ ๋ฐญ๋†์‚ฌ๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ๋กœ ๋งˆ์Œ์„ ๋จน์—ˆ๋‹ค. ํ…ƒ๋ฐญ์— ํฐ ๋ฐ”์œ„๋“ค์€ ์ œ๊ฑฐํ•˜์ง€ ๋ชปํ•˜์—ฌ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ทœ์น™๋“ค์„ ์ •ํ•˜์˜€๋‹ค.

     

    1. ๋ฐ”์œ„๋ฅผ(๋ฐ”์œ„๋Š” '1'๋กœ ํ‘œ๊ธฐ) ํ”ผํ•ดํ…ƒ๋ฐญ์„ ๋งŒ๋“ค๋˜ ์ •์‚ฌ๊ฐํ˜• ๋ชจ์–‘์œผ๋กœ ํ…ƒ๋ฐญ์„ ๋งŒ๋“ฌ
    2. ํ…ƒ๋ฐญ์€ ๊ฐ€์žฅ ๋„“์€ ํ…ƒ๋ฐญ 1๊ฐœ๋งŒ ๋งŒ๋“ฆ, ๊ทธ ํฌ๊ธฐ๋ฅผ ๋ฐ˜ํ™˜.
    3. ๋งŒ๋“  ํ…ƒ๋ฐญ์€ ๋ชจ๋‘ '#' ์œผ๋กœ ์ฒ˜๋ฆฌ

     

    ๊ฐ€์žฅ ๋„“๊ฒŒ ๋งŒ๋“ค์ˆ˜ ์žˆ๋Š” ํ…ƒ๋ฐญ์˜ ๊ธธ์ด์™€ ํ…ƒ๋ฐญ์„ ์ถœ๋ ฅํ•˜์‹œ์˜ค

    // ์ž…๋ ฅ
    0 0 0 0 0
    0 1 0 0 0
    0 1 0 0 0
    0 0 1 0 0
    0 0 0 1 0
    
    // ์ถœ๋ ฅ
    3 x 3
    
    0 0 # # #
    0 1 # # #
    0 1 # # #
    0 0 1 0 0
    0 0 0 1 0
    
    
    // ์ž…๋ ฅ
    0 0 0 1 0
    0 0 0 0 0
    0 0 1 0 0
    0 0 1 0 0
    0 0 0 1 0
    
    // ์ถœ๋ ฅ
    2 x 2
    
    # # 0 1 0
    # # 0 0 0
    0 0 1 0 0
    0 0 1 0 0
    0 0 0 1 0
    
    
    /* **********๋ฌธ์ œ********** */
    const ํ…ƒ๋ฐญ = []; //์ž…๋ ฅ๋ฐ›์€ ํ…ƒ๋ฐญ ๋ฆฌ์ŠคํŠธ
    let ๊ฐ€๊พผํ…ƒ๋ฐญ = []; //ํ…ƒ๋ฐญ์„ ๊ฐ€๊พผ ํ›„ ์ €์žฅ๋œ ๋ฆฌ์ŠคํŠธ
    
    // ์ฝ”๋“œ์ž‘์„ฑ
    
    console.log(๊ฐ€๊พผํ…ƒ๋ฐญ)
    
    

     

     

    ๋ฏธ๋ฆฌ ์ƒ๊ฐํ•ด ๋ด์•ผํ•  ๊ฒƒ

    ์žฌ๊ท€ํ•จ์ˆ˜์™€ ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ(Memoization)์„ ๋จผ์ € ์•Œ๊ณ  ๋ฌธ์ œ์— ์ ์šฉํ•ด๋ณด์ž

    • ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์žฌ๊ท€ํ•จ์ˆ˜๊ฐ€ ์žˆ๋‹ค
    function fn(n) {
      if (n === 1 || n === 2) {
        return 1;
      } else {
        return fn(n - 1) + fn(n - 2);
        // fn(6)
        // fn(5) + fn(4)
        // fn(4) + fn(3) + fn(3) + fn(2)
        // fn(3) + fn(2) + fn(2) + fn(1) + fn(2) + fn(1) + fn(2)
        // fn(2) + fn(1) + fn(2) + fn(2) + fn(1) + fn(2) + fn(1) + fn(2)
      }
    }
    
    console.log(fn(6));

     

     

     

    ๊ฐ™์€ ํ•จ์ˆ˜๊ฐ€ ๋ฐ˜๋ณตํ•ด์„œ ์‹คํ–‰์ด ๋˜๊ณ  ์žˆ์Œ -> ๋น„ํšจ์œจ์  -> ๊ทธ๋ ‡๋‹ค๋ฉด memoization ์„ ํ™œ์šฉํ•˜์ž !

    • memoization ๊ธฐ๋ฒ•
      : ์ปดํ“จํ„ฐ ํ”„๋กœ๊ทธ๋žจ์ด ๋™์ผํ•œ ๊ณ„์‚ฐ์„ ๋ฐ˜๋ณตํ•ด์•ผ ํ•  ๋•Œ, ์ด์ „์— ๊ณ„์‚ฐํ•œ ๊ฐ’์„ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•จ์œผ๋กœ์จ ๋™์ผํ•œ ๊ณ„์‚ฐ์˜ ๋ฐ˜๋ณต ์ˆ˜ํ–‰์„ ์ œ๊ฑฐํ•˜์—ฌ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์†๋„๋ฅผ ๋น ๋ฅด๊ฒŒ ํ•˜๋Š” ๊ธฐ์ˆ .
    let n = 6;
    let memory = Array(n + 1).fill(0); //[ 0, 0, 0, 0, 0, 0, 0 ]
    
    function fn(n) {
      if (n === 1 || n === 2) {
        memory[n] = 1;
        return 1;
      } else if (memory[n] !== 0) {
        // ๊ฐ’์ด ๋“ค์–ด๊ฐ€ ์žˆ์„ ๋•Œ
        return memory[n];
      } else {
        memory[n] = fn(n - 1) + fn(n - 2);
        console.log(memory[n]);
        return memory[n];
      }
    }
    
    // ๋ณ€ํ™”๋˜๋Š” ์–‘์ƒ
    
    // [0, 0, 0, 0, 0, 0, fn(5) + fn(4)]
    // [0, 0, 0, 0, 0, fn(4) + fn(3), fn(5) + fn(4)]
    // [0, 0, 0, 0, fn(3) + fn(2), fn(4) + fn(3), fn(5) + fn(4)]
    // [0, 0, 0, 0, fn(3) + fn(2), fn(4) + fn(3), fn(5) + fn(4)]
    // [0, 0, 0, fn(2) + fn(1), fn(3) + fn(2), fn(4) + fn(3), fn(5) + fn(4)]
    // [0, 0, 1, fn(2) + fn(1), fn(3) + fn(2), fn(4) + fn(3), fn(5) + fn(4)]
    // [0, 1, 1, fn(2) + fn(1), fn(3) + fn(2), fn(4) + fn(3), fn(5) + fn(4)]
    // [0, 1, 1, 2, fn(3) + fn(2), fn(4) + fn(3), fn(5) + fn(4)]
    // [0, 1, 1, 2, 3, 5, 8]
    
    
    // 2
    // 3
    // 5
    // 8
    
    console.log(fn(n)); // 8

     

     

     

    ๋‹ต

    let ํ…ƒ๋ฐญ = `0 0 0 0 0
    0 1 0 0 0
    0 1 0 0 0
    0 0 1 0 0
    0 0 0 1 0`
      .replace(/1/g, "!")
      .replace(/0/g, "1")
      .replace(/!/g, "0")
      .split("\n");
    
    console.log(ํ…ƒ๋ฐญ);
    
    let ์—ญ์ „ํ…ƒ๋ฐญ = [];
    for (let row of ํ…ƒ๋ฐญ) {
      ์—ญ์ „ํ…ƒ๋ฐญ.push(row.split(" "));
    }
    
    function sol(์—ญ์ „ํ…ƒ๋ฐญ) {
      const ๋†’์ด = ์—ญ์ „ํ…ƒ๋ฐญ.length;
      const ๋„“์ด = ์—ญ์ „ํ…ƒ๋ฐญ[0].length;
      let max = 0;
      let posx = 0;
      let posy = 0;
    
      for (let i = 0; i < ๋†’์ด; i++) {
        for (let j = 0; j < ๋„“์ด; j++) {
          ์—ญ์ „ํ…ƒ๋ฐญ[i][j] = parseInt(์—ญ์ „ํ…ƒ๋ฐญ[i][j], 10);
        }
      }
      for (let i = 1; i < ๋†’์ด; i++) {
        for (let j = 1; j < ๋„“์ด; j++) {
          if (์—ญ์ „ํ…ƒ๋ฐญ[i][j] == 1) {
            let min;
            //์ขŒ์ธก์›์†Œ์˜ ๊ฐ’์ด ๊ฐ€์žฅ ์ž‘์„ ๊ฒฝ์šฐ
            if (์—ญ์ „ํ…ƒ๋ฐญ[i - 1][j] >= ์—ญ์ „ํ…ƒ๋ฐญ[i][j - 1]) {
              min = ์—ญ์ „ํ…ƒ๋ฐญ[i][j - 1];
    
              // ์œ—์ธก์›์†Œ์˜ ๊ฐ’์ด ๊ฐ€์žฅ ์ž‘์„ ๊ฒฝ์šฐ
            } else if (์—ญ์ „ํ…ƒ๋ฐญ[i - 1][j] <= ์—ญ์ „ํ…ƒ๋ฐญ[i][j - 1]) {
              min = ์—ญ์ „ํ…ƒ๋ฐญ[i - 1][j];
            }
    
            // ๋Œ€๊ฐ์„  ์›์†Œ์˜ ๊ฐ’์ด ๊ฐ€์žฅ ์ž‘์€ ๊ฒฝ์šฐ
            if (min >= ์—ญ์ „ํ…ƒ๋ฐญ[i - 1][j - 1]) {
              min = ์—ญ์ „ํ…ƒ๋ฐญ[i - 1][j - 1];
            }
            // ํ˜„์žฌ ๊ธฐ์ค€์ ์ด ๊ทธ๋ฆด์ˆ˜ ์—†๋Š” ๊ฐ€์žฅ ํฐ ์ •์‚ฌ๊ฐํ˜•์˜ ํ•œ๋ณ€์˜ ๊ธธ์ด
            ์—ญ์ „ํ…ƒ๋ฐญ[i][j] = min + 1;
    
            // ํ…ƒ๋ฐญ ๋ฐฐ์—ด์—์„œ ๊ฐ€์žฅ ํฐ ์ˆซ์ž ์ฐพ๊ธฐ
            if (max < ์—ญ์ „ํ…ƒ๋ฐญ[i][j]) {
              max = ์—ญ์ „ํ…ƒ๋ฐญ[i][j];
              posx = j;
              posy = i;
            }
          }
        }
      }
      // ๋ฐญ์„ # ์œผ๋กœ ํ‘œ๊ธฐ
      for (let i = posy - (max - 1); i < posy + 1; i++) {
        for (let j = posx - (max - 1); j < posx + 1; j++) {
          ์—ญ์ „ํ…ƒ๋ฐญ[i][j] = "#";
        }
      }
      // ์ˆซ์ž๋ฅผ ๋‹ค์‹œ 0๊ณผ 1๋กœ ํ‘œ๊ธฐ
      for (let i = 0; i < ๋†’์ด; i++) {
        for (let j = 0; j < ๋„“์ด; j++) {
          if (์—ญ์ „ํ…ƒ๋ฐญ[i][j] >= 1) {
            ์—ญ์ „ํ…ƒ๋ฐญ[i][j] = 0;
          } else if (์—ญ์ „ํ…ƒ๋ฐญ[i][j] == 0) {
            ์—ญ์ „ํ…ƒ๋ฐญ[i][j] = 1;
          }
        }
      }
      // ๋ฐญ ์ถœ๋ ฅ
      for (let i of ์—ญ์ „ํ…ƒ๋ฐญ) {
        console.log(i);
      }
      // ํฌ๊ธฐ ์ถœ๋ ฅ
      console.log(`${max} x ${max}`);
    }
    
    sol(์—ญ์ „ํ…ƒ๋ฐญ);

    ๋Œ“๊ธ€