\(@^0^@)/

[알고리즘] leetcode - Pascal's Triangle II 본문

알고리즘

[알고리즘] leetcode - Pascal's Triangle II

minjuuu 2022. 7. 3. 14:18
728x90

Pascal's Triangle II

https://leetcode.com/explore/learn/card/array-and-string/204/conclusion/1171/

 

Explore - LeetCode

LeetCode Explore is the best place for everyone to start practicing and learning on LeetCode. No matter if you are a beginner or a master, there are always new topics waiting for you to explore.

leetcode.com

Input: rowIndex = 3
Output: [1,3,3,1]
Input: rowIndex = 0
Output: [1]

내가 시도했던 방법은
1. 사이드를 늘 1로 고정시킨다.
2. left, right 변수를 생성하여 반복문 안에 for문을 돌려서 하나씩 더 해준다.
그리고 반복문 스코프에서는 rowIndex를 counting? targeting 해주는 count라는 변수를 하나 생성하여, 하나씩 증가시키게 함. rowIndex보다 커지거나 같을 경우 멈춘다.

내가 적었지만, 나도 이해가 어려운 문장...
그래서 그런지 코드로 로직 짜기가 어려웠고, 접근방법도 실패했던 것 같음.

결국 코드를 완성 못 시키고 다른 개발자들의 설루션을 참고하였는데, 어떤 분이 진짜 말 그대로 클린 코드를 적어주셨다.
코드가 이해하기 어려운 것도 아니고, 내가 생각해내지 못한 방법이라 인상 깊게 보았음.

var getRow = function(rowIndex) {
    if(!rowIndex) return [1];
    
    let res = [1, 1]
    
    while(--rowIndex) {
        let next = [];
        
        for(let i = 0; i < res.length-1; i++) {
            next.push(res[i] + res[i+1])
        }
        res = [1, ...next, 1]
    }
    return res
};

많이 배웠던 부분은

1. 반복문의 조건을 --rowIndex로 해줌으로써, -1 된 3부터 시작하여 3, 2, 1까지 총 3번의 반복문을 돈다.
저렇게 표현할 수 있다는 것을 이제까지 몰랐거나 배웠어도 기억이 안 남..^^

2. 끝부분에 res = [ 1,... next, 1]을 사용해줌으로써 모든 배열 사이드에 1을 고정값으로 주고,
next의 값들을 계속 더해주는 로직인데, 이 부분에서 정말 많이 배웠다!
프로젝트 또는 알고리즘의 로직을 짤 때, 스프레드 연산자의 존재를 잊고 써먹지 않는 것 같다.
훨씬 간결하고 가독성도 좋은데 말이다. 코드의 퀄리티를 높이려면 꼭 필요한 문법이니 잊지 말고 사용해보자.


728x90