알고리즘

프로그래머스 정수를 나선형으로 배치하기 (JAVA)

박카스마시며코딩 2023. 5. 17. 22:33

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

 

프로그래머스

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

programmers.co.kr

 

저는 구현을 통해 문제를 해결하였습니다.

한쪽 방향으로 배열을 채우고 범위를 넘어가거나 채워져있다면 방향을 90도 회전시켰습니다.

여기서 주의할 점은 배열의 크기가 1일 때 컴파일 에러가 나오지 않게 하는 것이였습니다.

저는 처음에 while을 true로 하고 진행하여서 컴파일 에러가 나와 while문 조건을 바꿔 문제를 해결하였습니다.

 

class Solution {
    private static final int[] DY = {-1,0,1,0};
    private static final int[] DX = {0,1,0,-1};
    public int[][] solution(int n) {
        int[][] answer = makeMap(n);
        return answer;
    }
    private static int[][] makeMap(int n){
        int[][] answer = new int[n][n];
        int y = 0;
        int x = 0;
        int num = 1;
        int dir = 1;
        while(y >= 0 && y < n && x >= 0 && x < n){
            if(answer[y][x] != 0){
                break;
            }
            answer[y][x] = num++;
            y += DY[dir];
            x += DX[dir];
            if(x < 0 || x >= n || y < 0 || y >= n || answer[y][x] != 0){
                y -= DY[dir];
                x -= DX[dir];
                dir = (dir+1) % 4;
                y += DY[dir];
                x += DX[dir];
            }
        }
        return answer;
    }
}