728x90
반응형
programmers.co.kr/learn/courses/30/lessons/17687
안녕하세요 후르륵짭잡 입니다.
이 문제는 Swift의 String radix를 이용하면 쉽게 풀 수 있는 문제였습니다.
처음에는 문제가 이해 안됐으나, 계속 읽어보니 이해가 됐습니다.
** 저의 풀이 **
//0:20
func solution(_ n:Int, _ t:Int, _ m:Int, _ p:Int) -> String {
var say = 0
var isturn = 1
var num = 0
var answer : [String] = []
while say < t {
let number = String(num , radix: n)
for element in number {
if isturn == p && say < t{
answer.append(String(element).uppercased())
say += 1
}
if isturn == m {
isturn = 0
}
isturn += 1
}
num += 1
}
return answer.joined()
}
저는 이 문제를 t 번 말하기 전까지 계속 숫자를 증가시켜주었습니다.
String(숫자, radix : 진법)을 해준다면 String형으로 진법이 나오게 됩니다.
그리고 계속 돌려주고 최대 인원 숫자까지 돌면 초기화 해줍니다.
방법은 간단 합니다.
저 처럼 이렇게 String을 사용하지 않고
func toN(_ n:Int, _ base:Int) -> String{
let data = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"]
var out = ""
var res = n
var rem = 0
while res > 0 {
rem = res%base
res = res/base
out = data[rem] + out
}
if n == 0{
out = "0"
}
return out
}
이렇게 직접 진법을 구현하신 분도 계셨습니다.
예를들어 2진법을 구한다면
10을 2로 나눠주면 5가 되고 이 5를 다시 2로 나눠주면 1이 남으면서 2가 되고 2로 나누주면 1이 되고 1을 나눠주면 1이 남고 0이 됩니다.
그러면 1010 이렇게 나머지 부분만 추가해주면 2진법 완성!!
3진법 10진법 16진법도 마찮가지 입니다.
또 다른 방법으로는
func solution2(_ n: Int, _ t: Int, _ m: Int, _ p: Int) -> String {
let count = t*m
var values: [String] = []
var number = 0
while values.count < count {
values += String(number, radix: n).compactMap({ String($0).uppercased() })
number += 1
}
return stride(from: p - 1, to: count, by: m).reduce("", { $0 + values[$1] })
}
이렇게 stride를 사용하신 분도 계셨습니다.
** 새롭게 알게 된 사실 **
developer.apple.com/documentation/swift/1641347-stride
Stride는 반복된 작을 해주는 것 입니다.
for x in stride(from: 10, to: 0, by: -2){
print(x)
}
//결과
10
8
6
4
2
위에서 처럼 반복된 작업을 from 부터 to 까지 -2칸씩 내려간다와 같이
일정한 반복작업을 수행 할 때 사용 됩니다.
하지만 결과값이 하나로 출력 되기 때문에 변수로 넣을 수 없다는 단점이 있습니다.
728x90
반응형
'Xcode > Swift - Algorithm' 카테고리의 다른 글
Swift ) 프로그래머스 (Lv3) - 경주로 건설 (BFS) (0) | 2020.09.11 |
---|---|
Swift ) 프로그래머스(Lv3) - 보석 쇼핑 (TwoPointer & Hash) (0) | 2020.09.11 |
Swift ) 프로그래머스(Lv2) - [3차] 파일명 정렬 (RegularExpression) (0) | 2020.09.10 |
Swift ) 프로그래머스(Lv2) - [3차] 압축 (Hash) (0) | 2020.09.10 |
Swift ) 프로그래머스(Lv2) - [1차]프렌즈4블록 (Simulation) (0) | 2020.09.08 |
댓글