본문 바로가기
JAVA/프로그래머스

[Lv.0] 프로그래머스 - 정수를 나선형으로 배치하기 : Java

by ♡˖GYURI˖♡ 2024. 5. 10.
 

프로그래머스

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

programmers.co.kr

 

 

 

이해하기

비슷한 문제를 그래도 좀 풀었다고 생각했는데 항상 바로바로 떠오르지가 않는다.

  • 넣어줄 값인 value (초기값 1로 시작)
  • 행과 열 row, col
  • 방향 direction (초기값 0)

 

  • value가 n * n일 때까지 while문 반복
    • answer[row][col]에 value 넣고 value += 1
    • 방향이 0이면 (오른쪽으로 이동)
      • col이 n - 1이거나 현 위치의 오른쪽에 0이 아닌 다른 값이 들어있는 경우
        • 방향 전환 : 1
        • row++
      • 아니라면 col++
    • 방향이 1이면 (아래쪽으로 이동)
      • row가 n - 1이거나 현 위치의 아래쪽에 0이 아닌 다른 값이 들어있는 경우
        • 방향 전환 : 2
        • col--
      • 아니라면 row++
    • 방향이 2이면 (왼쪽으로 이동)
      • col이 0이거나 현 위치의 왼쪽에 0이 아닌 다른 값이 들어있는 경우
        • 방향 전환 : 3
        • row--
      • 아니라면 col--
    • 방향이 3이면 (위로 이동)
      • row가 0이거나 현 위치의 위쪽에 0이 아닌 다른 값이 들어있는 경우
        • 방향 전환 : 0
        • col++
      • 아니라면 row--

 

 

문제풀이

class Solution {
    public int[][] solution(int n) {
        int[][] answer = new int[n][n];
        int value = 1;
        int row = 0;
        int col = 0;
        int direction = 0;
        
        while (value <= n * n) {
            answer[row][col] = value++;
            
            if (direction == 0) {
                if (col == n - 1 || answer[row][col + 1] != 0) {
                    direction = 1;
                    row++;
                } else {
                    col++;
                }
            } else if (direction == 1) {
                if (row == n - 1 || answer[row + 1][col] != 0) {
                    direction = 2;
                    col--;
                } else {
                    row++;
                }
            } else if (direction == 2) {
                if (col == 0 || answer[row][col - 1] != 0) {
                    direction = 3;
                    row--;
                } else {
                    col--;
                }
            } else {
                if (row == 0 || answer[row - 1][col] != 0) {
                    direction = 0;
                    col++;
                } else {
                    row--;
                }
            }
        }
        
        return answer;
    }
}