[프로그래머스] 정수를 나선형으로 배치하기

박지예·2023년 10월 31일
0

코딩테스트

목록 보기
13/17

문제

흔한 달팽이 알고리즘이다.

유튜브를 보면서 문제 풀이를 공부하고 이해했다.

    public int[,] solution(int n)
    {
        int[,] answer = new int[n, n];
        int cnt = 1;

        int i = 0;
        int j = 0;
        answer[i, j] = cnt++;

        int[] di = new int[] { 0, 1, 0, -1 };
        int[] dj = new int[] { 1, 0, -1, 0 };
        int dr = 0;

        while (cnt <= n * n)
        {
            int ni = i + di[dr];
            int nj = j + dj[dr];

            if ((ni >= 0 && ni < n) && (nj >= 0 && nj < n) && answer[ni, nj] == 0)
            {
                i = ni;
                j = nj;
                answer[i, j] = cnt++;
            }
            else
                dr = (dr + 1) % 4;
        }
        return answer;
    }

BFS 길찾기 할떄도 쓰였던 상하좌우 이동 로직을 사용하였다.
다음 이동할 위치를 미리 설정해 놓기. => 가능하지 않는다면? 회전해야 할 타이밍!

profile
언젠간 바다로 갈거야!🐋

0개의 댓글