๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด/๊ตฌํ˜„

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์ •์ˆ˜๋ฅผ ๋‚˜์„ ํ˜•์œผ๋กœ ๋ฐฐ์น˜ํ•˜๊ธฐ

by syLim___ 2023. 10. 10.
728x90

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

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr


 

 

Java

class Solution {
    public int[][] solution(int n) {
        int[][] answer = new int[n][n];
        
        // ์ˆœ์„œ๋Œ€๋กœ ์˜ค๋ฅธ์ชฝ, ์•„๋ž˜, ์™ผ์ชฝ, ์œ„
        int direction = 0;
        int[] dx = new int[]{0,1,0,-1};
        int[] dy = new int[]{1,0,-1,0};
        
        int curNum = 1;
        int row=0; int col=0;
        
        while (true){
            
            // ์ˆซ์ž๋ฅผ ์ฑ„์›Œ๋„ฃ๋Š”๋‹ค. 
            answer[row][col] = curNum++;
            if(curNum > n*n) break;
            
            int nextRow = row + dx[direction%4];
            int nextCol = col + dy[direction%4];
            
            // ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚ฌ๊ฑฐ๋‚˜, ์ด๋ฏธ ์ˆซ์ž๊ฐ€ ์žˆ์œผ๋ฉด ๋‹ค์Œ ์œ„์น˜๋ฅผ ๊ฐฑ์‹ ํ•ด์ฃผ์ง€ ์•Š๊ณ  ๋ฐฉํ–ฅ๋งŒ ๋ฐ”๊ฟ”์ค€๋‹ค.
            if(nextRow < 0 || nextRow >= n || nextCol<0 || nextCol >= n
              || answer[nextRow][nextCol] > 0){
                direction++;
                curNum--; 
            }else{
            	// ์ˆซ์ž๋ฅผ ์ฑ„์šธ ๋‹ค์Œ ์œ„์น˜๋ฅผ ๊ฐฑ์‹ ํ•œ๋‹ค.
                row = nextRow;
                col = nextCol;
            }  
        }
        return answer;
    }
}
728x90