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()
}