Bleeding edge

[LeetCode] 118. Pascal's Triangle - 자바스크립트 0620 본문

코딩테스트 공부

[LeetCode] 118. Pascal's Triangle - 자바스크립트 0620

codevil 2022. 6. 20. 11:42

https://leetcode.com/problems/pascals-triangle/

 

Pascal's Triangle - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

문제 풀이는 그림대로 풀이하면된다

1.모든 삼각형에 1을 처음에 넣는다

2. 위에 삼각형의 좌 우에 해당하는 칸을 더하면서 계속 내려간다!

단지 차이가 있다고 하면, 자바스크립트의 모양은 저렇게 삼각형은 아니기에 모양을 살짝 다른식으로 생각하면 풀이하기가 쉽다. 

문제풀이

1. return 할 arr를 answer로 선언한다

    const answer = []

2. answer에 주어진 numRows만큼 [ ]빈 정렬을 대입한다. 그리고 그 행렬의 index만큼 1을 push한다.

    for (let i = 0; i < numRows; i++) {
        answer.push([])
        for (let j = 0; j < i + 1; j++) {
            answer[i].push(1)
        }
    }

이제 숫자를 제외한 모양만큼의 모양이 나온다.

3. 우선, 0, 1같은 경우에는 위에 이야기 한대로 좌 우가 없기 때문에 더할 수가 없으니 2부터 인덱스를 시작해야한다. 우선 지금 우리가 넣어야할 인덱스를 순서대로 i , j라고한다면 본인보다 위에 위치한 행렬을 구해야하기 때문에 i-1, 그리고 본인의 위에서 좌우를 골라야 하기 때문에 j  - 1 그리고 j를 루프에 넣어서 더한다.

    for (let i = 2; i < answer.length; i++) {
        for (let j = 1; j < answer[i].length - 1; j++) {
            answer[i][j] = answer[i - 1][j - 1] + answer[i - 1][j]
        }
    }

 

전체 풀이

var generate = function (numRows) {
    const answer = []
    for (let i = 0; i < numRows; i++) {
        answer.push([])
        for (let j = 0; j < i + 1; j++) {
            answer[i].push(1)
        }
    }
    for (let i = 2; i < answer.length; i++) {
        for (let j = 1; j < answer[i].length - 1; j++) {
            answer[i][j] = answer[i - 1][j - 1] + answer[i - 1][j]
        }
    }
    return answer
};