programmers_삼각 달팽이_java

2023. 4. 16. 16:16Algorithm/Programmers

728x90

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

 

프로그래머스

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

programmers.co.kr

import java.util.*;

class Solution {
    
    private static int[][] delta = {{1,0}, {0, 1}, {-1, -1}}; // 하 우 좌상
    
    public int[] solution(int n) {
        int[] answer = {};
        List<Integer> answerList = new ArrayList<>();
        
        int map[][] = new int[n][n];
        int y = 0, x = 0;
        int idx = 1;
        int dir = 0;
        boolean endFlag = false;
        
        while(true){
            map[y][x] = idx++;
            
            int cnt = 0;
            while(true){
                int nexty = y + delta[dir%3][0];
                int nextx = x + delta[dir%3][1];
                // 오른쪽으로 이동할 경우 있음 메모.
                if(0<= nexty && nexty <n && 0<= nextx && nextx < n && map[nexty][nextx] == 0){
                    y = nexty;
                    x = nextx;
                    break;
                }else{ // 이동 불가 상태
                    dir++;
                    cnt++;
                }
                if(cnt >= 2) {
                    endFlag = true;
                    break;
                }
            }    
            if(endFlag) break;
        }
        
        for(int i = 0; i<n; i++){
            for(int j = 0; j<=i; j++){
                answerList.add(map[i][j]);
            }
        }
        
        answer = new int[answerList.size()];
        int tmp = 0;
        for(int i : answerList){
            answer[tmp++] = i;
        }
        
        return answer;
    }    
}