본문 바로가기

프로그래머스 (Swift)/기초

[Day25-1] 정수를 나선형으로 배치하기

문제

 

내 정답 코드

import Foundation

func solution(_ n:Int) -> [[Int]] {
    var result:[[Int]] = []
    (0..<n).map {_ in result.append(Array(repeating: 0, count: n)) }
    
    var round: Int = 1
    var count: Int = 1
    var value: Int = 0
    
    while(count != n*n+1) {
        if round == 1 {
            let row = value
            for i in 0..<n {
                if result[row][i] == 0 {
                    result[row][i] = count
                    print("\(value), \(i), \(count)")
                    count += 1
                    value = i
                }
            }
            round += 1
        } else if round == 2 {
            let column = value
            for i in 0..<n {
                if result[i][column] == 0 {
                    result[i][column] = count
                    count += 1
                    value = i
                }
            }
            round += 1
        } else if round == 3 {
            let row = value
            for i in (0..<n).reversed() {
                if result[row][i] == 0 {
                    result[row][i] = count
                    count += 1
                    value = i
                }
            }
            round += 1
        } else if round == 4 {
            let column = value
            for i in (0..<n).reversed() {
                if result[i][column] == 0 {
                    result[i][column] = count
                    count += 1
                    value = i
                }
            }
            round = 1
        }
    }
    return result
}

 

#

1. 1라운드는 -> 방향, 2는 아래 방향, 3은 <-방향, 4는 위 방향이다.

2. n을 받아 2차원 정사각형 배열을 만들고 모두 0으로 채운다.

3. 라운드를 돌며 0이 아니면 값을 count를 늘려가며 채운다.

4. 이 때, 0이 아닌 값을 value에 저장하여 열/행 인덱스를 기억하고

5. 다음 라운드에서 위 인덱스부터 라운드를 진행한다.

6. count가 모든 배열을 채우면 종료된다.


배운 기술