티스토리 뷰
🔗 문제 링크
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)
📌 풀이 또는 기억할 정보
'PS > 문제 풀이' 카테고리의 다른 글
| [프로그래머스/Swift] 148653번 - 마법의 엘리베이터 (0) | 2025.03.07 |
|---|---|
| [프로그래머스/Swift] 178870번 - 연속된 부분 수열의 합 (0) | 2025.03.06 |
| [프로그래머스/Swift] 118667번 - 두 큐 합 같게 만들기 (0) | 2025.03.04 |
| [프로그래머스/Swift] 68936번 - 쿼드압축 후 개수 세기 (0) | 2025.03.03 |
| [프로그래머스/Swift] 77885번 - 2개 이하로 다른 비트 (0) | 2025.03.02 |
