티스토리 뷰

Algorithm

Algorithm) Programmers Level2 삼각 달팽이 swift

행복하고 싶은 사람 2022. 11. 9. 10:33

https://school.programmers.co.kr/learn/courses/30/lessons/68645

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

푸는데 엄~~청 오래 걸린 문제입니다.. 중간 중간에 검색해 보고 싶은 욕구가 솟구쳤지만 이겨냈네요

3가지 case를 나눠서 따로 따로 구현해줬습니다.

 

삼각형에서 왼쪽 변을 타고 내려갈때, 바닥에 도달해서 오른쪽으로 갈때 , 오른쪽 변을 타고 올라갈때 세 for문이 이에 대한 코드이고 안에 삼각형도 똑같이 진행되므로 해당 배열의 값이 0이면 재귀로 동작하도록 구현했습니다

하 힘들었지만 뿌듯하네요

import Foundation

func circle(_ startvalue: Int,_ loc: Int, _ cur: Int, _ n: Int,_ ans: inout [Int]) {
    var cur = cur // 현재 층
    var loc = loc
    var cnt = startvalue
    ans[loc] = startvalue
    for i in 0..<n-1 { // 내려올때
        cnt += 1
        loc = loc + cur + i
        ans[loc] = cnt
    }
    cur += n - 1
    for _ in 0..<n - 1 { // 횡이동
        cnt += 1
        loc = loc + 1
        ans[loc] = cnt
    }
    if n >= 2 {
        for _ in 0..<n - 2 {
            cnt += 1
            loc = loc - cur
            cur -= 1
            ans[loc] = cnt
        }
    }
    
    loc = loc + cur
    if loc < ans.count {
        if ans[loc] == 0 {
            circle(cnt+1, loc, cur+1, n - 3, &ans )
        }
    }
}

func solution(_ n:Int) -> [Int] {
    var num = 0
    for i in 1...n {
        num += i
    }
    var ans = [Int](repeating: 0, count: num)
    circle(1, 0, 1, n, &ans)
    return ans
}
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함