(Swift) Programmers n진수 게임

SteadySlower·2023년 1월 21일
0

Coding Test

목록 보기
213/298

코딩테스트 연습 - [3차] n진수 게임

문제 풀이 아이디어

백준을 풀 때는 거의 풀어본 적이 없는데 프로그래머스에서는 진법에 관련된 문제가 많이 나오는 것 같습니다. 0 ~ ?까지의 숫자를 n진수로 바꾸고 나열해야 합니다. 매번 튜브가 말할 때마다 숫자를 구하기 보다는 미리 구해놓는 편이 코드도 짧고 간단합니다. m명의 멤버가 t번 말할 분량의 문자열이 필요하므로 m * t의 길이 이상 구해놓으면 됩니다. 그리고 나서 그 문자열의 p 번째부터 시작해서 m씩 건너뛰면서 길이가 t인 문자열을 리턴하면 됩니다.

코드

func solution(_ n:Int, _ t:Int, _ m:Int, _ p:Int) -> String {
    // 필요한 길이만큼 미리 n진수를 나열한 String을 구하고 시작
    var fullRadix = [String]()
    var i = 0
    
    // m명의 멤버가 t번 말하는 동안 필요하므로 길이가 t * m 이상이 될 때까지 i를 늘려가며 구한다.
    while fullRadix.count < t * m {
        fullRadix.append(contentsOf: String(i, radix: n).map { String($0) })
        i += 1
    }
    
    // 튜브가 말할 숫자
    var ans = ""
    // index는 0부터 시작하므로 순서에서 -1
    var p = p - 1
    
    // t개 만큼 튜브가 말할 문자를 ans에 더한다.
    for _ in 0..<t {
        ans += fullRadix[p].uppercased()
        p += m
    }
    
    return ans
}
profile
백과사전 보다 항해일지(혹은 표류일지)를 지향합니다.

0개의 댓글