[프로그래머스][JS] 삼각 달팽이

Kyle·2020년 10월 19일
0

problem solving

목록 보기
2/36
post-custom-banner

sprial matrix문제를 해결하고 비슷하게 생긴 삼각 달팽이 문제를 풀어보았다.

문제에서는 정삼각형 모양이지만 나는 📐 이 모양같은 직각삼각형이라고 생각하고 해결했다.

문제 : 프로그래머스__삼각달팽이

해결 방법

sprial matrix와 같이 start/end-row/colum 을 설정해주어서 해결하고 싶었지만, 삼각형이기 때문에 대각선으로 올라가 endColumn을 이용해 대각선 라인을 채우기 어려웠다.
그래서 cnt라는 변수를 이용해 대각선을 채울 때 마지막 column을 계산해주었다.

  • 맨 왼쪽줄

    맨 왼쪽 줄을 채운뒤에는 맨 첫번째 Array가 꽉 차기 때문에 startColumnstartRow까지 ++ 해준다.

  • 맨 아래줄

    맨 아래줄을 채우면 삼각형이기 때문에 endRowendColumn 까지 --해준다.

  • 대각선

    대각선은 대각선이 한번지나가면 count를 세는 cnt변수를 설정했다.
    배열의 마지막 값 arr.length-1cnt를 빼 주었다.

내 코드

function solution(n) {
    const results = []
    for (let i = 1 ; i <=n ; i ++){
        results.push(Array.from({length:i},()=>0))
    }
    let counter = 1,startColumn=0,startRow=0,endRow=n-1,endColumn=n-1,cnt=0;
    while (startColumn<=endColumn&&startRow<=endRow){
      //맨왼쪽줄
        for (let i = startRow; i<=endRow; i++){
            results[i][startColumn]=counter
            counter++
        }
        startRow++
        startColumn++
      //맨아래줄
        for (let i = startColumn; i<=endColumn; i++){
            results[endRow][i]=counter
            counter++
        }
        endColumn--
        endRow--
      //대각선줄
        for(let i = endRow; i>=startRow; i--){
          results[i][results[i].length-1-cnt]=counter
          counter++
        }
        endColumn--
        startRow++
        cnt++
    }
    
    return results.flat();
}

flat 메소드를 이용해 2차원 배열을 간단하게 1차원 배열로 바꿀 수 있었다.

const answer=[]
    for (let i = 0; i<n; i ++){
        for(let x of results[i]){
            answer.push(x)
        }
    }

==> results.flat() 이렇게 해주면된다.


sprial matrix와 비슷하기는 한데 대각선 부분이 달라서 대각선 부분에서 고민을 많이했다.

profile
Kyle 발전기
post-custom-banner

0개의 댓글