한 걸음씩

[프로그래머스][JS] 정사각형으로 만들기 본문

Programmers

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

winter17 2023. 6. 13. 19:25

https://school.programmers.co.kr/learn/courses/30/lessons/181830

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

풀이 과정

function solution(arr) {
    const row = arr.length
    const column = arr[0].length

    if (row === column){
        return arr
    }else if (row > column){
        for (let i = 0; i < arr.length; i++){
            while (arr[i].length !== row){
                arr[i].push(0)   
            }
        }
    }else if (row < column){
        for (let j = 0; j < column - row; j++){
            arr.push(Array(column).fill(0))
        }
    }
    return arr
}

입출력 예로 나와있는 케이스는 전부 통과했는데 채점을 하면 통과를 못해서 살펴보니까

arr = [[1, 1], [1, 1], [1, 1], [1, 1]]라는 배열이 주어졌을 때, 

열과 행의 길이가 일치하도록 맞춰주면 다음과 같이 나와야한다. → [[1, 1, 0, 0],[1, 1, 0, 0],[1, 1, 0, 0], [1, 1, 0, 0]] 

그런데 코드를 살펴봤을 때, 두 번째 조건문에서 row > column인 경우,

else if (row > column){
        for (let i = 0; i < arr.length; i++){
               arr[i].push(0)   
               // 이렇게 하면 통과하는 배열이 정해져있다 -> while문을 사용해서 row만큼 0을 추가해줘야한다
        }
 }

처음 시도 때 위와 같이 코드를 작성했는데 입출력 예시 배열에 맞춰서 코드를 짰기 때문에, 0을 두 개 이상 추가해야 하는 경우에는 오류가 발생해 버리는 것이다. 

때문에, 0을 row와 같아질때까지 추가하려면 while문을 사용해야 한다. 언제까지 반복을 해야 할지 모르니까!

 

function solution(arr) {
    let array = arr.slice()
    const row = arr.length
    const col = arr[0].length
    // console.log(row, col) 
    if(row > col){
        for (let i = 0; i < row; i++){
            for (let j = 0; j < (row - col); j++){
                array[i].push(0)
            }
        }
        // console.log(array)
        return array
    }else if (row < col){
        const emptyArr = Array.from({length: (col)}, () => 0)
        // console.log(emptyArr)
        for (let i = 0; i < (col - row); i++){
            array.push(emptyArr)
        }
        return array
    }else {
        return array
    }
    // console.log(array)
}

// row > col일 때, 추가 테스트 케이스
// console.log(solution([[1, 1], [1, 1], [1, 1], [1, 1]]))
// [[1, 1, 0, 0], [1, 1, 0, 0], [1, 1, 0, 0], [1, 1, 0, 0]]

리뷰

입출력 예시로 나와있는 배열은 다 통과를 했는데 테스트는 실패가 떠서 왜인지 한참 생각했는데

내가 코드를 짤 때, 주어진 예시에 맞춰서 짰기 때문에 완전 다른 유형의 배열이 들어오면 통과를 못했던거였다

이 부분만 제외하면 전체적으로 어려운 문제는 아닌 것 같다.