PS/문제 풀이

[프로그래머스/Swift] 17687번 - n진수 게임

시르베어 2025. 2. 16. 20:10

풀이

  • 출력할 숫자의 각 자리수를 스택에 역순으로 저장
  • 자신의 숫자를 확인하고 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()
}