문제링크
https://school.programmers.co.kr/learn/courses/30/lessons/68645
접근방법
규칙 찾고 싶어서 난리치다가 찾아낸 규칙!
왼쪽 대각선, 아래 직선, 오른쪽 대각선
세 선을 반복해서 돈다는 사실을 발견했다.
이차원 배열로 만들어서 인덱스를 보면 인덱스에도 규칙이 있다.
왼쪽 대각선 -> 행의 값을 1씩 늘리면서 값도 1씩 증가
아래 직선 -> 선을 따라서 값이 1씩 증가
오른쪽 대각선 -> 행과 열의 값을 1씩 감소시키면서 값을 1씩 증가
그리고 규칙이 적용되는 개수는 n, n-1, n-2 ..... 1로 감소한다는 사실도 발견했다.
이걸 코드로 짜기만 하면 되는데 쉽지 않았다ㅠㅅㅠ
정답코드
function solution(n) {
var answer = Array.from(Array(n),() => new Array(n));
let temp=0;
let row=-1;
let col=0;
while(n>0){
for(let i=0;i<n;i++) answer[++row][col]=++temp;
for(let i=0;i<n-1;i++) answer[row][++col]=++temp;
for(let i=0;i<n-2;i++) answer[--row][--col]=++temp;
n-=3;
}
let result = answer.flat().filter(value => value !== null);
return result;
}
n*n 이차원 배열을 만들어준다.
값을 넣기 위한 변수인 temp, 행과 열을 나타내는 row와 col 변수를 선언해준다.
for문이 순서대로 위에 말한 왼쪽 대각선, 아래 직선, 오른쪽 대각선을 채워준다.
배열을 다 채워준 뒤에는
flat 함수를 통해 이차원 배열을 모두 펴준다.(일차원 배열로 만든다는 의미)
펴진 배열을 filter 함수를 통해 null 값이 아닌 곳만 뽑아내서 result에 저장해주고 result를 return 해주면 된다.
구글링의 도움을 받아서 풀었지만 내 힘으로 규칙을 찾았다는 점에서 만족 ㅎ.ㅎ
함수의 종류와 사용법을 공부하면 푸는데 도움이 많이 되겠다고 느꼈다..
'Programmers' 카테고리의 다른 글
[Programmers]문자열 압축/JS (0) | 2024.02.23 |
---|---|
[Programmers]혼자 놀기의 달인/JS (0) | 2024.02.19 |
[Programmers]땅따먹기/JS (0) | 2024.02.01 |
[Programmers]가장 큰 정사각형 찾기/JS (1) | 2024.01.28 |
[Programmers]게임 맵 최단거리/JS (1) | 2024.01.23 |