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

임윤희·2024년 10월 10일

정수를 나선형으로 배치하기

🔍 알고리즘 분류

  • 구현

💡 문제 풀이

  1. 처음에 배열을 모두 0으로 초기화
  2. 왼->오, 위->아래, 오->왼, 아래->위 순서로 진행하며 0이 아닐 때에만 num++
  3. 한 바퀴 돌면 cycle++

📄 코드

  • C++
#include <string>
#include <vector>
#include <iostream>

using namespace std;

vector<vector<int>> solution(int n) {
    vector<vector<int>> answer(n, vector<int>(n, 0));
    
    int num = 1;
    int cycle = 0;
    // n^이 될 때까지
    while (num <= n*n) {
        // 왼 -> 오
        for (int i = 0; i < n; i++) {
            // 0일 때만 진행
            if (!answer[cycle][i]) {
                answer[cycle][i] = num;
                num++;
            }
        }
        // 위 -> 아래
        for (int i = 0; i < n; i++) {
            if (!answer[i][n - 1 - cycle]) {
                answer[i][n - 1 - cycle] = num;
                num++;
            }
        }

        // 오 -> 왼
        for (int i = n - 1; i >= 0; i--) {
            if (!answer[n - 1 - cycle][i]) {
                answer[n - 1 - cycle][i] = num;
                num++;
            }
        }
        
        // 아래 -> 위
        for (int i = n - 1; i >= 0; i--) {
            if (!answer[i][cycle]) {
                answer[i][cycle] = num;
                num++;
            }
        }
        
        // 다음 바퀴를 위해 cycle 증가
        cycle++;
    }

    return answer;
}
  • Python
def solution(n):
    answer = [[0] * n for _ in range(n)]
    x, y = 0, 0
    dir = 0
    for num in range(1, n * n + 1):
        answer[x][y] = num
        if num == n * n: # 런타임 에러 방지: n*n숫자를 채우고도 더 확인하려할 경우 인덱스 에러 발생
            break
        if dir == 0: # 오른쪽
            y += 1
            if y == n - 1 or answer[x][y + 1] != 0:
                dir = (dir + 1) % 4
        elif dir == 1: # 아래
            x += 1
            if x == n - 1 or answer[x + 1][y] != 0:
                dir = (dir + 1) % 4
        elif dir == 2: # 왼쪽
            y -= 1
            if y == 0 or answer[x][y - 1] != 0:
                dir = (dir + 1) % 4
        elif dir == 3: # 위
            x -= 1
            if x == 0 or answer[x - 1][y] != 0:
                dir = (dir + 1) % 4
        
    return answer

0개의 댓글