알고리즘/프로그래머스

[프로그래머스 Lv0] 정수를 나선형으로 배치하기 - JAVA [자바]

DevelopJJong 2025. 11. 26. 13:25

문제

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


수도코드 작성

 


작성한 코드

import java.util.*;

class Solution {
    public int[][] solution(int n) {
        int[][] answer = new int[n][n];
        int[] dRow = {0, 1, 0, -1};
        int[] dCol = {1, 0, -1, 0};
        
        int row = 0, col = 0, dir = 0;
        
        for(int cnt = 1; cnt <= n*n; cnt++){
            answer[row][col] = cnt;
            
            int nr = row + dRow[dir];
            int nc = col + dCol[dir];
            
            if(nr < 0 || nr>= n || nc < 0 || nc >= n || answer[nr][nc] != 0){
                dir = (dir + 1) % 4;
                
                nr = row + dRow[dir];
                nc = col + dCol[dir];
            }
            
            row = nr;
            col = nc;
        }
        
        return answer;
    }   
    
}

보완할 점 / 헷갈린 점

2차원배열에 대해서 이해하기 힘들었는데 이번 문제를 통해서 어떤 방식으로 진행되고 방향 전환 및 코드가 어떻게 진행되는 지 알 수 있었다.