ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Programmers] JavaScript 알고리즘 | Lv.0 정사각형으로 만들기
    ► JS Algorithm/Programmers 2024. 8. 11. 23:47
    반응형

    🔒 문제 설명

    이차원 정수 배열 arr 매개변수로 주어집니다. arr 행의 수가 많다면 열의 수가 행의 수와 같아지도록 행의 끝에 0 추가하고, 열의 수가 많다면 행의 수가 열의 수와 같아지도록 열의 끝에 0 추가한 이차원 배열을 return 하는 solution 함수를 작성해 주세요.


    🔒 제한사항 

    • 1 ≤ arr의 길이 ≤ 100
      • 1 ≤ arr의 원소의 길이 ≤ 100
    • arr의 모든 원소의 길이는 같습니다.
    • 1 ≤ arr 원소의 원소 ≤ 1,000

    🔒 입출력 예

    arr result
    [[572, 22, 37], [287, 726, 384], [85, 137, 292], [487, 13, 876]] [[572, 22, 37, 0], [287, 726, 384, 0], [85, 137, 292, 0], [487, 13, 876, 0]]
    [[57, 192, 534, 2], [9, 345, 192, 999]] [[57, 192, 534, 2], [9, 345, 192, 999], [0, 0, 0, 0], [0, 0, 0, 0]]
    [[1, 2], [3, 4]] [[1, 2], [3, 4]]

    🔒 입출력 예 설명

    입출력 예 #1

    • 예제 1번의 arr은 행의 수가 4, 열의 수가 3입니다. 행의 수가 더 많으므로 열의 수를 4로 만들기 위해 arr의 각 행의 끝에 0을 추가한 이차원 배열 [[572, 22, 37, 0], [287, 726, 384, 0], [85, 137, 292, 0], [487, 13, 876, 0]]를 return 합니다.

    입출력 예 #2

    • 예제 2번의 arr은 행의 수가 2, 열의 수가 4입니다. 열의 수가 더 많으므로 행의 수를 4로 만들기 위해 arr의 각 열의 끝에 0을 추가한 이차원 배열 [[57, 192, 534, 2], [9, 345, 192, 999], [0, 0, 0, 0], [0, 0, 0, 0]]을 return 합니다.

    입출력 예 #3

    • 예제 3번의 arr 행의 수와 열의 수가 2 같습니다. 따라서 0 추가하지 않고 [[1, 2], [3, 4]] return 합니다.

     

    🔐 solution of mine

    Math.max()

    Array() 생성자

    Array.from()

    Array.prototype.fill()

    Array.prototype.map()

    function solution(arr) {
      const neededLength = Math.max(arr.length, arr[0].length); //container 배열 길이 구하기
      const containerLength = new Array(neededLength); // 필요한 container 배열만큼 빈배열 만들기
      const containerArr = Array.from(
        containerLength,
        (v, i) => arr[i] || new Array(neededLength).fill(0)
      ); // 배열이 길어지는 경우, 정답 도출하기 || 배열이 안길어지는 경우, 내부배열 길게 만들기
    
      // 내부배열 길어진경우, 채우기
      if (containerArr.length > containerArr[0].length) {
        const arr = containerArr.map((v) =>
          new Array(containerArr.length).fill(0)
        );
    
        return console.log(
          arr.map((v, i) =>
            v.map((z, j) => (containerArr[i][j] ? containerArr[i][j] : 0))
          )
        );
      } else {
        return console.log(containerArr);
      }
    }
    
    solution([
      [572, 22, 37],
      [287, 726, 384],
      [85, 137, 292],
      [487, 13, 876],
    ]); // output: [[572, 22, 37, 0], [287, 726, 384, 0], [85, 137, 292, 0], [487, 13, 876, 0]]
    
    solution([
      [57, 192, 534, 2],
      [9, 345, 192, 999],
    ]); // output: [[57, 192, 534, 2], [9, 345, 192, 999], [0, 0, 0, 0], [0, 0, 0, 0]]
    
    solution([
      [1, 2],
      [3, 4],
    ]); // output: [[1, 2], [3, 4]]


    🔐  GPT's refactoring

    Math.max()

    Array.prototype.map()

    Array.prototype.fill()

    Array.prototype.push()

    Array() 생성자

    function solution(arr) {
      // 최종 배열의 길이는 주어진 배열의 행과 열 중 더 긴 길이를 선택
      const neededLength = Math.max(arr.length, arr[0].length);
    
      // 각 행의 길이를 neededLength로 맞추고, 짧으면 0으로 채움
      const containerArr = arr.map((row) =>
        row.length < neededLength
          ? [...row, ...new Array(neededLength - row.length).fill(0)]
          : row
      );
    
      // 행의 수가 부족하면 빈 배열을 0으로 채운 배열을 추가
      while (containerArr.length < neededLength) {
        containerArr.push(new Array(neededLength).fill(0));
      }
    
      // 결과 배열을 출력
      return console.log(containerArr);
    }
    
    solution([
      [572, 22, 37],
      [287, 726, 384],
      [85, 137, 292],
      [487, 13, 876],
    ]); // output: [[572, 22, 37, 0], [287, 726, 384, 0], [85, 137, 292, 0], [487, 13, 876, 0]]
    
    solution([
      [57, 192, 534, 2],
      [9, 345, 192, 999],
    ]); // output: [[57, 192, 534, 2], [9, 345, 192, 999], [0, 0, 0, 0], [0, 0, 0, 0]]
    
    solution([
      [1, 2],
      [3, 4],
    ]); // output: [[1, 2], [3, 4]]

     


     

    🔐 GPT's solution

    Array.prototype.map()

    Array() 생성자

    Array.prototype.fill()

    Array.prototype.push()

    function solution(arr) {
      const rowCount = arr.length; // 행의 수
      const colCount = arr[0].length; // 열의 수
    
      // 행의 수가 더 많은 경우: 각 행의 끝에 0을 추가
      if (rowCount > colCount) {
        return console.log(
          arr.map((row) => [...row, ...new Array(rowCount - colCount).fill(0)])
        );
      }
      // 열의 수가 더 많은 경우: 행의 끝에 새로운 0으로 채워진 배열 추가
      else if (rowCount < colCount) {
        const newArr = [...arr]; // 원본 배열을 변경하지 않도록 복사본 생성
        while (newArr.length < colCount) {
          newArr.push(new Array(colCount).fill(0));
        }
        return console.log(newArr);
      }
      // 행과 열의 수가 같을 경우: 그대로 반환
      else {
        return console.log(arr);
      }
    }
    
    solution([
      [572, 22, 37],
      [287, 726, 384],
      [85, 137, 292],
      [487, 13, 876],
    ]); // output: [[572, 22, 37, 0], [287, 726, 384, 0], [85, 137, 292, 0], [487, 13, 876, 0]]
    
    solution([
      [57, 192, 534, 2],
      [9, 345, 192, 999],
    ]); // output: [[57, 192, 534, 2], [9, 345, 192, 999], [0, 0, 0, 0], [0, 0, 0, 0]]
    
    solution([
      [1, 2],
      [3, 4],
    ]); // output: [[1, 2], [3, 4]]

     

    🔐 solution of others

    Array() 생성자

    Math.max()

    Array.prototype.fill()

    Array.prototype.map()

    const solution = (arr) =>
      console.log(
        new Array(Math.max(arr.length, arr[0].length))
          .fill(new Array(Math.max(arr.length, arr[0].length)).fill(0))
          .map((v1, i1) => v1.map((v2, i2) => (arr[i1] ? arr[i1][i2] || 0 : 0)))
      );
    
    solution([
      [572, 22, 37],
      [287, 726, 384],
      [85, 137, 292],
      [487, 13, 876],
    ]); // output: [[572, 22, 37, 0], [287, 726, 384, 0], [85, 137, 292, 0], [487, 13, 876, 0]]
    
    solution([
      [57, 192, 534, 2],
      [9, 345, 192, 999],
    ]); // output: [[57, 192, 534, 2], [9, 345, 192, 999], [0, 0, 0, 0], [0, 0, 0, 0]]
    
    solution([
      [1, 2],
      [3, 4],
    ]); // output: [[1, 2], [3, 4]]

     

    🔐 solution of others

    Math.abs()

    Array.prototype.push()

    Array() 생성자

    function solution(arr) {
      const ROWS = arr.length;
      const COLS = arr[0].length;
      const DIFF = Math.abs(ROWS - COLS);
    
      if (ROWS > COLS) {
        for (let i = 0; i < ROWS; i++) {
          for (let j = 0; j < DIFF; j++) {
            arr[i].push(0);
          }
        }
      } else if (ROWS < COLS) {
        for (let i = 0; i < DIFF; i++) {
          const row = new Array(COLS).fill(0);
          arr.push(row);
        }
      }
    
      return console.log(arr);
    }
    
    solution([
      [572, 22, 37],
      [287, 726, 384],
      [85, 137, 292],
      [487, 13, 876],
    ]); // output: [[572, 22, 37, 0], [287, 726, 384, 0], [85, 137, 292, 0], [487, 13, 876, 0]]
    
    solution([
      [57, 192, 534, 2],
      [9, 345, 192, 999],
    ]); // output: [[57, 192, 534, 2], [9, 345, 192, 999], [0, 0, 0, 0], [0, 0, 0, 0]]
    
    solution([
      [1, 2],
      [3, 4],
    ]); // output: [[1, 2], [3, 4]]

     


     

    반응형
Designed by Tistory.