규칙을 찾아서 구현하는 문제
2차원 배열을 생성해서 각 row의 데이터 크기를 미리 초기화한다.
값을 반환할 때 flatMap을 활용하여 2차원 배열을 1차원 배열로 변환한다.
import Foundation
func solution(_ n:Int) -> [Int] {
var result = [[Int]]()
for i in 1...n {
result.append([Int](repeating: 0, count: i))
}
var num = 1
let size = (1...n).reduce(0){ $0 + $1 }
var row = (0, n-1)
var col = 0
while num <= size {
//왼쪽
//row +1씩, col 고정
for i in stride(from: row.0, to: row.1+1, by: +1) {
if num > size {
break
}
result[i][col] = num
num += 1
}
//아래쪽
//col +1씩, row 고정
for i in stride(from: col+1, to: result[row.1].count-col, by: +1){
if num > size {
break
}
result[row.1][i] = num
num += 1
}
//오른쪽
//row -1씩, col -1씩
for i in stride(from: row.1-1, to: row.0, by: -1){
if num > size {
break
}
let targetC = result[i].count-1 - col
result[i][targetC] = num
num += 1
}
row.0 += 2
row.1 -= 1
col += 1
}
return result.flatMap{ $0 }
}
[프로그래머스] 스티커 모으기(2) (1) | 2024.03.05 |
---|---|
[프로그래머스] 큰 수 찾기 (0) | 2024.03.05 |
[프로그래머스] 연속된 부분 수열의 합 (1) | 2024.02.05 |
[소프티어] 택배 마스터 광우 (0) | 2024.02.01 |
Algorithm with python (1) | 2024.02.01 |