티스토리 뷰

🔗 문제 링크

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

💡 구현 아이디어

  1. 바깥쪽에서 안쪽으로 진행
  2. 모든 블록을 확인하면 종료
  3. 전체 사이클의 수는 (n-1)/3+1
  4. idx: 배열의 위치, num: 현재 숫자, c: 현재 사이클(바깥쪽에서 부터 몇번째 삼각형인지
  5. 왼쪽 아래로 내려갔다가 오른쪽 끝으로 갔다가 왼쪽 위로 올라가면서 한 사이클 마무리
  6. 사이클의 시작 인덱스는 이전 사이클 인덱스 + 현재사이클 수 * 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)

📌 풀이 또는 기억할 정보

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/01   »
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 31
글 보관함