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

codingNoob12·2024년 3월 22일
0

알고리즘

목록 보기
39/73

문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/68645

문제 풀이 흐름

  1. N×NN \times N배열 선언
  2. 숫자를 채울 현재 위치를 (0, 0)으로 지정
  3. 방향에 따라 이동할 수 없을때 까지 반복하며 숫자를 채우기
    A. 현재 위치 (x, y)에 값을 채워 넣는다.
    B. dx, dy 테크닉으로 다음 위치 (nx, ny)를 구한다.
    C. 다음 위치가 배열 범위를 벗어났거나 arr[nx][ny]값이 0이 아닌 경우 방향을 변경
  4. arr배열에 담긴 결과를 answer배열로 옮겨 담는다.
class Solution {
    private static final int[] dx = {0, 1, -1};
    private static final int[] dy = {1, 0, -1};
    
    public int[] solution(int n) {
        int[][] arr = new int[n][n];
        int cur = 1, d = 0, max = n * (n + 1) / 2, x = 0, y = 0;
        while (cur <= max) {
            arr[y][x] = cur++;
            while (cur <= max) {
                int nx = x + dx[d], ny = y + dy[d];
                if (ny >= n || nx >= n || nx < 0 || ny < 0 || arr[ny][nx] != 0) {
                    d = (d + 1) % 3;
                    continue;
                }
                x = nx;
                y = ny;
                break;
            }
        }
        
        int[] answer = new int[max];
        int idx = 0;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j <= i; j++) {
                answer[idx++] = arr[i][j];
            }
        }
        return answer;
    }
}
profile
나는감자

0개의 댓글