Header Banner
Kakao Logo

TECH.KAKAO.GG

기술 자료/Algorithm/프로그래머스 정사각형으로 만들기

프로그래머스 정사각형으로 만들기

Algorithm
👁️ 61일 전

문제 설명

주어진 2차원 배열 arr은 행과 열의 길이가 다를 수 있습니다.
이 배열을 정사각형 형태(N × N) 로 만들기 위해,

  • 행(row) 수와 열(column) 수 중 더 큰 값을 N이라 정의하고,

  • 부족한 행은 [0, 0, ...] 배열을 추가,

  • 부족한 열은 해당 행 끝에 0을 추가합니다.

최종적으로, arrN × N 크기의 2차원 배열이 됩니다.

 

function solution(arr) {
    let rowCount = arr.length;
    let colCount = Math.max(...arr.map(row => row.length));
    let size = Math.max(rowCount, colCount); // 목표 크기

    // 행이 부족하면 0으로 채운 새 행 추가
    while (arr.length < size) {
        arr.push(Array(size).fill(0));
    }

    // 각 행의 길이를 맞추기 위해 열을 0으로 채움
    for (let i = 0; i < size; i++) {
        while (arr[i].length < size) {
            arr[i].push(0);
        }
    }

    return arr;
}

 

알고리즘 접근 순서

  1. arr.length로 현재 행의 수(row count) 를 구한다.

  2. 각 행의 길이 중 최댓값(column count) 을 구한다.

  3. N = max(row count, column count) 로 확정한다.

  4. 배열을 순회하며 다음을 수행한다:

    • 행이 부족하면 [0, 0, ..., 0] 행 추가.

    • 각 행의 열이 부족하면 0을 끝에 추가.

 

핵심 포인트

  • Math.max(...arr.map(row => row.length)) 형태를 통해 열의 최대 길이를 계산

  • Array(n).fill(0)은 배열을 0으로 초기화할 때 가장 깔끔한 방법

  • 정사각형 크기(size) 기준으로만 판단하면 모든 조건을 쉽게 처리할 수 있음

키워드

프로그래머스 정사각형으로 만들기정사각형으로 만들기정사각형 배열 변환배열 패딩 처리행열 길이 비교