PS/문제 풀이
[프로그래머스/Swift] 68645번 - 삼각 달팽이
시르베어
2025. 3. 5. 13:22
🔗 문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/68645
💡 구현 아이디어
- 바깥쪽에서 안쪽으로 진행
- 모든 블록을 확인하면 종료
- 전체 사이클의 수는 (n-1)/3+1
- idx: 배열의 위치, num: 현재 숫자, c: 현재 사이클(바깥쪽에서 부터 몇번째 삼각형인지
- 왼쪽 아래로 내려갔다가 오른쪽 끝으로 갔다가 왼쪽 위로 올라가면서 한 사이클 마무리
- 사이클의 시작 인덱스는 이전 사이클 인덱스 + 현재사이클 수 * 4
💻 코드
import Foundation
func solution(_ n:Int) -> [Int] {
var idx = 0
var num = 1
var arr = [Int](repeating: -1, count: (1...n).reduce(0, +))
var preIdx = 0
for c in 0..<(n-1)/3+1 {
idx = preIdx+c*4
preIdx = idx
arr[idx] = num
num += 1
for z in 1..<(n-3*c) {
idx += 2*c+z
arr[idx] = num
num += 1
}
for _ in 0..<n-(3*c)-1 {
idx += 1
arr[idx] = num
num += 1
}
if (n-2)-3*c > 0 {
for z in 0..<(n-2)-3*c {
idx -= ((n-c)-z)
arr[idx] = num
num += 1
}
}
}
return arr
}
❌ 틀린 이유 및 틀린 부분
⏳ 시간 복잡도
각 칸을 한번씩 방문하기 때문에 O(n)