[프로그래머스] 삼각 달팽이 (JAVA)

유존돌돌이·2021년 10월 28일
0

Programmers

목록 보기
90/167
post-thumbnail

문제 설명

정수 n이 매개변수로 주어집니다. 다음 그림과 같이 밑변의 길이와 높이가 n인 삼각형에서 맨 위 꼭짓점부터 반시계 방향으로 달팽이 채우기를 진행한 후, 첫 행부터 마지막 행까지 모두 순서대로 합친 새로운 배열을 return 하도록 solution 함수를 완성해주세요.

제한사항

n은 1 이상 1,000 이하입니다.

Code

import java.util.*;
class Solution {
    public int[] solution(int n) {
        int dir = 0;
        int i=0 , j=0;
        int max = (1+n)*n/2;
        int[][] arr = new int[n][n];
        boolean[][] visit= new boolean[n][n];
        for(int num=1 ; num<=max ; num++) {
            arr[i][j] = num;
            visit[i][j] = true;
            if(dir%3==0) {
                if((i+1)>=n || visit[i+1][j]){
                    dir++;
                    j++;
                } else {
                    i++;
                }
            } else if(dir%3==1) {
                if((j+1)>=n || visit[i][j+1]){
                    dir++;
                    j--;
                    i--;
                } else {
                    j++;
                }
            } else {
                if(visit[i-1][j-1]){
                    dir++;
                    i++;
                } else {
                    i--;
                    j--;
                }
            }
        }

        int idx = 0;
        int[] ret = new int[max];
        for(int ii=0 ; ii<n ; ii++) {
            for(int jj=0 ; jj<n ; jj++) {
                if(arr[ii][jj]==0) break;
                ret[idx++] = arr[ii][jj];
            }
        }
        return ret;
    }
}

Comment

visit을 만들어서 방문했으면 방향을 바꾸는 방법으로 풀었다

0개의 댓글