본문 바로가기

프로그래머스/구현

[구현] 프로그래머스 '삼각 달팽이' - js

반응형

1. 문제

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

 

프로그래머스

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

programmers.co.kr

2. 구현

function solution(n) {
  let answer = [];
  let count = 0;
  let arr = Array.from({ length: n }, (el, idx) => Array(idx + 1).fill(0));
  let currentX = -1; // 상하
  let currentY = 0; // 좌우
  while (n > 0) { // n의 값이 유효할 때까지 반복(안에 있는 세모들도 결국 같은 모양새이므로)
    for (let i = 0; i < n; i++) {
      // 위에서 아래로 내려가는 대각선
      currentX++;
      count++;
      arr[currentX][currentY] = count;
    }
    for (let i = 0; i < n - 1; i++) {
      // 왼쪽에서 오른쪽으로 가는 선
      currentY++; // 이미 위의 for문을 통해 currentX 값이 삼각형 가장 밑 변이므로
      count++;
      arr[currentX][currentY] = count;
    }
    for (let i = 0; i < n - 2; i++) {
      // 아래에서 위로 내려가는 대각선
      currentX--;
      currentY--;
      count++;
      arr[currentX][currentY] = count;
    }
    n -= 3; // 내부 삼각형 빗변 길이 = 외부 삼각형 빗변 길이 - 3(그림보면 규칙 찾을 수 있음)
  }

  for (let i = 0; i < arr.length; i++) {
    answer = [...answer, ...arr[i]]; // 2중 배열 풀어줌
  }

  return answer;
}

결국 중간에 답을 보고 연구하긴 했지만 이 문제를 풀기위해 고민하느라고 두뇌가 살짝 말랑해진 것 같다. 머리 쓴 느낌 ㅋㅋㅋㅋㅋㅋ어렵지만 풀이를 알고나면 재밌다.. 풀이가 머리 속에 생각이 안날 뿐^^

이해에 도움이 된 블로그)

https://velog.io/@tnehd1998/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%82%BC%EA%B0%81-%EB%8B%AC%ED%8C%BD%EC%9D%B4-JavaScript

 

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

문제 분류 : 월간 코드 챌린지문제 출처 : 프로그래머스 Level 2 - 삼각 달팽이3부분으로 나눠 해당 위치의 값을 저장한다.1-1. 위에서 아래로 내려가는 대각선1-2. 왼쪽에서 오른쪽으로 이동1-3. 아래

velog.io

 

복기

6/20
반응형