본문 바로가기

# 02/Swift - CTP

[Swift] 코딩테스트 연습! Lv2. 삼각 달팽이

반응형
/* 삼각 달팽이

 - 정수 n이 매개변수로 주어집니다. 다음 그림과 같이 밑변의 길이와 높이가 n인 삼각형에서 맨 위 꼭짓점부터 반시계 방향으로 달팽이 채우기를 진행한 후, 첫 행부터 마지막 행까지 모두 순서대로 합친 새로운 배열을 return 하도록 solution 함수를 완성해주세요.

 제한사항
 n은 1 이상 1,000 이하입니다.
*/
func solution14(_ n:Int) -> [Int] {
    var result:[[Int]] = []
    for _ in 1...n {
        result.append([])
    }
    var startIndex:Int = -1
    var endIndex:Int = n
    var value = 1
    for i in 1...(n+2)/3 {
        startIndex += 1
        endIndex -= 1
        if startIndex <= endIndex-1 {
            for j in startIndex...endIndex-1 {
                result[j].insert(value, at: i-1)
                value += 1
            }
        }
        if i <= endIndex+i-result[endIndex].count {
            for k in i...endIndex+i-result[endIndex].count {
                result[endIndex].insert(value, at: k-1)
                value += 1
            }
        }
        startIndex += 1
        if 1 <= endIndex-startIndex {
            for j in 1...endIndex-startIndex {
                result[endIndex-j].insert(value, at:result[endIndex-j].count-i+1)
                value += 1
            }
        }
    }
    var list:[Int] = []
    for r in result {
        list += r
    }
    return list
}
반응형