문제
입력
진법 n, 미리 구할 숫자의 갯수 t, 게임에 참가하는 인원 m, 튜브의 순서 p 가 주어진다.
- 2 ≦ n ≦ 16
- 0 < t ≦ 1000
- 2 ≦ m ≦ 100
- 1 ≦ p ≦ m
출력
튜브가 말해야 하는 숫자 t개를 공백 없이 차례대로 나타낸 문자열. 단, 10~15는 각각 대문자 A~F로 출력한다.
해석
n진법으로 숫자를 변환한 후, 튜브가 말해야하는 마지막 차례까지 모든 숫자를 누적해서 저장한 다음 튜브가 말해야하는 문자들만 골라서 출력한다.
n진법으로 변환할 때는 String의 생성자를 이용한다.
public init<T>(_ value: T, radix: Int = 10, uppercase: Bool = false) where T : BinaryInteger
코드
import Foundation
extension String {
subscript(_ index: Int) -> String {
return String(self[self.index(self.startIndex, offsetBy: index)])
}
}
func solution(_ n:Int, _ t:Int, _ m:Int, _ p:Int) -> String {
var numbers: [String] = []
var now: Int = 0 // 현재 숫자
var count: Int = 0 // 현재 담은 숫자 갯수
while count < t * m {
let number = String(now, radix:n, uppercase: true) // 진법 변환된 숫자
numbers.append(number)
now += 1 // 다음 숫자
count += number.count // 해당 숫자만큼 길이 증가
}
var ans: [String] = []
var index: Int = p-1
let joinedNumbers = numbers.joined() // 문자열
while ans.count < t {
ans.append(joinedNumbers[index])
index += m
}
return ans.joined()
}
'PS > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 괄호 변환 (0) | 2024.09.17 |
---|---|
[프로그래머스] 문자열 압축 (1) | 2024.09.16 |
[프로그래머스] 오픈채팅방 (1) | 2024.09.16 |
[프로그래머스] 파일명 정렬 (0) | 2024.09.15 |
[프로그래머스] 압축 (0) | 2024.09.15 |