문제
프로그래머스 월간 코드 챌린지 시즌 1 삼각 달팽이
programmers.co.kr/learn/courses/30/lessons/68645
언어
자바스크립트(JavaScript)
접근 방법
- 값을 모두 채웠는지 확인한다.
- 왼쪽 아래가 비는 경우 왼쪽 아래를 채운다. 다만 왼쪽 위도 비는 경우는 왼쪽 위를 먼저 채운다.
- 왼쪽 아래가 비지 않고 오른쪽이 비는 경우 오른쪽을 채운다.
- 왼쪽 아래, 오른쪽이 비지 않는 경우 왼쪽 위를 채운다.
코드
function solution(n) {
const answer = [];
const arr = getEmptyArr(n);
arr[0][0] = 1;
let x = 0;
let y = 0;
let value = 1;
while(true){
// 값을 모두 채웠는지 확인
if (value === n*(n+1)/2){
break;
}
if(arr[y+1] && arr[y+1][x] === 0){
// 왼쪽 아래가 비는 경우
if(arr[y-1] && arr[y-1][x-1] === 0){
// 왼쪽 아래가 비는데, 왼쪽 위도 비는 경우
value ++;
x--;
y--;
arr[y][x] = value;
}else{
// 왼쪽 아래가 비는 경우
value ++;
y++;
arr[y][x] = value;
}
}else if(arr[y] && arr[y][x+1] === 0){
// 왼쪽 아래가 비어있지 않고, 오른쪽이 비는 경우
value ++;
x++;
arr[y][x] = value;
}else {
// 왼쪽 아래도 비어있지 않고, 오른쪽도 비어있지 않는 경우
value ++;
x--;
y--;
arr[y][x] = value;
}
}
console.log(arr)
return arr.flat();
}
const getEmptyArr = (n) => {
const arr = [];
for (let i=0; i<n; i++){
arr.push(new Array(i+1).fill(0));
}
return arr;
}
복기
- 어려웠다. 코드뿐만 아니라 어떻게 풀지 결정하기도 어려웠다.
- 벽인지 아닌지를 체크할때 idx 값을 체크할 필요없이 arr[idx] 자체가 존재하는지로 체크하면 로직 짜기 편하다.
'개발 공부 > 알고리즘 문제 풀이' 카테고리의 다른 글
[프로그래머스] 이진 변환 반복하기 (0) | 2021.04.12 |
---|---|
[프로그래머스] 퀴드압축 후 개수 세기 (0) | 2021.04.12 |
[프로그래머스] 다리를 지나는 트럭 (0) | 2021.04.07 |
[프로그래머스] 두 개 뽑아서 더하기 (0) | 2021.04.07 |
알고리즘 복잡도와 빅 오 표기법 (0) | 2020.06.20 |