[swift] 스위프트 투칸의 플라이볼 채우기
스위프트의 투칸(2D) 배열은 다양한 방식으로 채울 수 있습니다. 이번 글에서는 투칸 배열을 플라이볼 형태로 채우는 방법에 대해 알아보겠습니다.
1. 플라이볼이란?
플라이볼은 일련의 숫자들로 구성된 형태로, 중앙을 기준으로 숫자가 하나씩 증가하면서 외부로 퍼져나가는 형태입니다. 예를 들어, 아래와 같이 플라이볼을 채울 수 있습니다.
1 2 3 4 5 6
16 17 18 19 20 7
15 24 25 26 21 8
14 23 22 27 22 9
13 12 11 10 9 10
2. 플라이볼 채우기 코드
아래는 스위프트를 사용해서 플라이볼을 채울 수 있는 코드 예시입니다.
func fillFlyball(n: Int) -> [[Int]] {
var flyball = Array(repeating: Array(repeating: 0, count: n), count: n)
var num = 1
var rowStart = 0
var rowEnd = n - 1
var colStart = 0
var colEnd = n - 1
while num <= n * n {
for i in colStart...colEnd {
flyball[rowStart][i] = num
num += 1
}
rowStart += 1
for i in rowStart...rowEnd {
flyball[i][colEnd] = num
num += 1
}
colEnd -= 1
for i in stride(from: colEnd, through: colStart, by: -1) {
flyball[rowEnd][i] = num
num += 1
}
rowEnd -= 1
for i in stride(from: rowEnd, through: rowStart, by: -1) {
flyball[i][colStart] = num
num += 1
}
colStart += 1
}
return flyball
}
let n = 6
let flyball = fillFlyball(n: n)
for row in flyball {
for num in row {
print(num, terminator: " ")
}
print()
}
3. 코드 설명
위의 코드는 주어진 숫자 n
을 기반으로 플라이볼을 채우는 함수 fillFlyball
을 구현하고 있습니다.
flyball
이라는n
xn
크기의 2D 배열을 생성하고, 각 요소를 0으로 초기화합니다.num
변수를 사용해서 숫자를 하나씩 증가시키며 플라이볼을 채웁니다.rowStart
,rowEnd
,colStart
,colEnd
변수를 사용해서 플라이볼의 경계를 지정합니다.- 4개의 반복문을 통해 플라이볼을 채웁니다. 첫 번째 반복문은 왼쪽의 세로 줄을 채우는 반복문이고, 두 번째 반복문은 아래쪽의 가로 줄을 채우는 반복문입니다. 세 번째 반복문은 오른쪽의 세로 줄을 채우는 반복문이고, 네 번째 반복문은 위쪽의 가로 줄을 채우는 반복문입니다.
- 모든 반복문이 완료되면
flyball
배열이 플라이볼로 채워집니다.
위의 예시 코드에서는 n
을 6으로 설정하여 6x6 크기의 플라이볼을 채우는 방법을 보여주고 있습니다.