본문 바로가기
🐣 알고리즘

[프로그래머스] Swift - 정수를 나선형으로 배치하기 (LV.0)

by @Eddy 2023. 6. 10.
728x90

👆문제풀러 가기👆

문제 설명

양의 정수 n이 매개변수로 주어집니다. n × n 배열에 1부터 n2 까지 정수를 인덱스 [0][0]부터 시계방향 나선형으로 배치한 이차원 배열을 return 하는 solution 함수를 작성해 주세요.

제한 사항

  • 1 ≤ n ≤ 30

입출력 예

n result
4 [[1, 2, 3, 4], [12, 13, 14, 5], [11, 16, 15, 6], [10, 9, 8, 7]]
5 [[1, 2, 3, 4, 5], [16, 17, 18, 19, 6], [15, 24, 25, 20, 7], [14, 23, 22, 21, 8], [13, 12, 11, 10, 9]]

풀이 [ 메모리: 16.7mb, 최대시간: 0.14ms ] 

func solution(_ n:Int) -> [[Int]] {
    var arr = Array(repeating: Array(repeating: 0, count: n), count: n)
    var (y, x) = (0, 0)

    for i in 1...(n * n) {
        arr[y][x] = i

        // 오른쪽으로가자~
        if (x+1 < n) && (arr[y][x+1] == 0) {
            // 오른쪽으로 움직일 수 있는 조건만들기
            if (y-1 >= 0) && (arr[y-1][x] == 0) {
                y -= 1
                continue
            }
            x += 1
            continue
        }

        // 내려가자~
        if (arr[y][x] != 0) && (y+1 < n) && (arr[y+1][x] == 0) {
            y += 1
            continue
        }

        // 왼쪽으로 가자~
        if (arr[y][x] != 0) && (x-1 >= 0) && (arr[y][x-1] == 0) {
            x -= 1
            continue
        }

        // 다시 올라가자~
        if (arr[y][x] != 0) && (y-1 >= 0) && arr[y-1][x] == 0 {
            y -= 1
        }
    }
    return arr
}

이게 왜 기초 문제? 라는 느낌의 문제였다.

문제를 처음 마주했을 때 숨이 턱 막히는 느낌.

 

기본 이차원 배열을 생성하고,

동작 하나하나를 나눠 오른쪽 / 아래 / 왼쪽 / 위 순서로 배열값이 반영되도록 만들었다.

올라가는 동작 중간에 오른쪽으로 이동하지 않도록 조건을 추가하여 마무리..

 

나루토가 생각나는 문제였다..

반응형

댓글