2024.10.25 삼각형 달팽이

장재영·2024년 10월 25일
0

주어진 자연수 n에 따라 삼각형 형태로 숫자를 채워 넣는 문제

답안:

function solution(n) {
	//예외
    if(n === 1){
        return [1]
    }
    if(n === 2){
        return [1, 2, 3]
    }
    
    //결과 저장공간
    const coordinate = new Array(n).fill(0).map((a, b) => new Array(b + 1));
    
    //현재 위치
    const location = [0, 0];
    
    //다음 위치 더해줄 값
    const addLocation = [[1, 0], [0, 1], [-1, -1]];
    
    //다음 위치 인덱스값(방향)
    let direction = 0;
    
    //위치의 값
    let num = 1;
  
    while(true){
        const [y, x] = location;
      
      	//현재 위치에 값이 있을경우 === 완전히 채워진 경우
        if(coordinate[y][x]){
            break;
        }
      
      	//현재 위치에 값 저장
        coordinate[y][x] = num;
      
      	//다음값
        num++;
      
      	//다음위치
        const [yPlus, xPlus] = addLocation[direction];
        location[0] = y + yPlus;
        location[1] = x + xPlus;
      
      	//다음 위치가 경계거나 값이 있을 경우 방향 변경
        if(location[0] + yPlus === n || location[1] + xPlus === n || coordinate[location[0] + yPlus][location[1] + xPlus]){
            direction = (direction + 1) % 3;
        }
    }
  
  	//2차원 배열을 1차월 배열로 변환
    return coordinate.flat()
}
  • 한 방향으로 쭉 이동하다가 막히면 다음 방향으로 전환하는 알고리즘
  • 위 알고리즘을 생각하는게 90%
profile
개발 하고 싶은 비버

0개의 댓글