PS/Programmers

프로그래머스 삼각달팽이 / JAVA

얍연구소장 2023. 3. 20.

https://school.programmers.co.kr/learn/courses/30/lessons/68645?language=java 

 

프로그래머스

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

programmers.co.kr

 

 

> 풀이1

// 아래로 이동

// 오른쪽으로 이동

// 왼쪽 대각선 위로 이동

// 출력

> 풀이2

 * 중복된 코드 삭제

class Solution {
    
    public static int[] dx = {0,1,-1}; // {아래, 오른쪽, 왼쪽대각선 위}
    public static int[] dy = {1,0,-1}; // {아래, 오른쪽, 왼쪽대각선 위}
    
    public int[] solution(int n) {
        int[][] arr = new int[n][n];
        int x = 0;
        int y = 0;
        int d = 0; // d = 0 : 아래, d = 1 : 오른쪽, d = 2 : 왼쪽대각선위
        int num = 1;
        
        while(true) {
            arr[y][x] = num++;
            int nx = x + dx[d];
            int ny = y + dy[d];
            if(nx == n || ny == n || nx == -1 || ny == -1 || arr[ny][nx] != 0) {
                d = (d+1) % 3;
                nx = x + dx[d];
                ny = y + dy[d];
                if(nx == n || ny == n || nx == -1 || ny == -1 || arr[ny][nx] != 0) {
                    break;
                }
            }
            x = nx;
            y = ny;
        }
        
        int idx = 0;
        int[] answer = new int[num-1];
        for(int i = 0; i < n; i++) {
            for(int j = 0; j <= i; j++) {
                answer[idx++] = arr[i][j];
            }
        }
        return answer;
    }
}

 

댓글