티스토리 뷰

풀이

  • 출력할 숫자의 각 자리수를 스택에 역순으로 저장
  • 자신의 숫자를 확인하고 p의 차례가 되면 결과 배열에 저장
  • 출력할 숫자가 떨어지면 다음숫자를 다시 각자리수로 나워서 스택에 역순으로 저장
  • 스택을 쓰는 이유는 remove First 가 시간을 많이 쓰기 때문에 최대한 removeLast를 쓰고자 했다 (근데, Array.reversed를 쓰면 똑같이 시간이 들지도?)

전체 코드

func solution(_ n:Int, _ t:Int, _ m:Int, _ p:Int) -> String {
  var T: Int = 0 // 출력한 숫자의 개수
  var num: Int = -1 // 현재 숫자
  var numStack: [String] = []
  var P: Int = 0 // 현재 차례
  var result: [String] = []
  while T < t {
    if numStack.isEmpty { // 숫자가 떨어지면 리필
      num += 1
      let str = String(num,radix: n)
      str.reversed().forEach{ numStack.append(String($0.uppercased())) }
    }
    let tell = numStack.removeLast()
    if P == (p-1) {
      result.append(tell)
      T += 1
    }
    P = (P + 1) % m
  }
  return result.joined()
}

공지사항
최근에 올라온 글
최근에 달린 댓글
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
글 보관함