๐ซ TIL - init(_: radix: )
swift์์ ์ง์๋ณํ์ ํ๋ ๋ฉ์๋, radix์ ๋ํด์ ๋ฐฐ์ ์ต๋๋ค. (์๊ณ ๊ฐ๋ฉด ์ฝํ ์์ ์ ์ฉํ๊ฒ ์ฌ์ฉํ ๋ฏ!๐ค)
let num = 7
print(String(num, radix: 2))
// "111"
- radix ๋ค์ ์์ ๋กญ๊ฒ 10์ง์๋ฅผ ์ด๋ค ์ง์๋ก ๋ณํํ ์ง ์ ์ผ๋ฉด ๋๋ค.
- Stringํํ๋ก ์ถ๋ ฅ๋๋ค.
์ ์ด์ง์ ์ธ๋ฐ, Int ํํ๊ฐ ๋์ง ์๋๊ฐ? ๋น์ฐํ์ง!! Int๋ 10์ง์ ์๋??
var num = 7
print(Int(num, radix: 2))
// error
์ผ๋จ, ๋ด๊ฐ ์๊ฐํ๋ ์ด์ ์ค ํ๋๋, Int๋ 10์ง์๋ฅผ ๊ฐ์ง๋ค. ๊ทธ๋์ intํ "111"๊ณผ ์ด์ง์ "111" ์ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์, Int๋ก ๋ฐ๋ก ํ๋ณํ์ด ๋ถ๊ฐ๋ฅํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ ์ด๋ฏธ์ง ์ฒ๋ผ, radix๋ string ํ๋กํ ์ฝ์ ๋ฐ๋ฅธ๋ค๊ณ ๋์์๋ค. ์ง๋ฒ ์ ํ์ string์ผ๋ก ์ถ๋ ฅ๋๋ค๋ ๊ฒ์ ๊ธฐ์ตํ์!!
๐ ๋ฌธ์ ๋งํฌ
https://school.programmers.co.kr/learn/courses/30/lessons/70129
๐ ๋์ ์ฒซ๋ฒ์งธ ํ์ด - ์๊ฐ์ด๊ณผ
ํ ์ผ 2, 5, 6, 8 ์๊ฐ์ด๊ณผ
- while๋ฌธ์ด ๋๋ฌด ๋ง์์ ์๊ฐ์ด๊ณผ์ ๊ฑธ๋ ธ๋?
- while๋ฌธ์ true๋ก ๋์ง ์๊ณ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ ๊ณ ๋ฏผํด๋ณด์.
- while๋ฌธ์์ ํ์ถํ์ง ๋ชปํด์ ์๊ฐ์ด๊ณผ๊ฐ ๋ฌ๋ ๊ฒ
- result ๊ฐ 10 ์ผ๋์ ๋ํ ์กฐ๊ฑด๋ฌธ์ ์ถ๊ฐํด์ฃผ๋ฉด์ break ๋ฌธ์ ๊ฑธ์ด์ค
- ๊ทธ๋ฆฌ๊ณ ๋ก์ง์ ์ด๋ป๊ฒ ๊ณ ์ณ๋ 2, 5, 6, 8๋ง ์๋ฌ๋๋๋ฐ, ์ซ์๊ฐ ์์ฃผ ์ปค์ง๋ฉด ๊ฐ๋น์ด ์๋๋ ?
- ์ด์ค while๋ฌธ์ ์ฌ์ฉํ๋ค๊ธฐ๋ณด๋จ, filter๋ radix ๋ฌธ๋ฒ์ ์ฌ์ฉํด๋ณด๋๊ฒ ์ข์๋ฏ
- filter - O(N) / radix - O(1)
- radix๋ฅผ ๊ตฌํ๋ ๋ถ๋ถ์์ while๋ฌธ์ ์ฌ์ฉํ์ง ์๊ฒ ๊ณ ์ณ์ผํจ.
- ๋์งธ๋ก, ์๋ ์ฝ๋๋ก ์์ฑํ๋ฉด ์๊ฐ์ด๊ณผ
- filter๋ฅผ ์ฌ์ฉํด์ “0”์ ์ง์์ฃผ๋ฉด ๋ ์ข์ ๊ฒ
- var deleteZeroCount = copyS.components(separatedBy: "0").joined().count
import Foundation
let s = "110010101001" // ๊ฒฐ๊ณผ [3, 8]
func solution(_ s: String) -> [Int] {
var zerocount = 0
var rotation = 0
var copyS = s
var deletezero = 0
var ans = [Int]()
while true {
rotation += 1
print(rotation)
// 0์ ๊ฑฐํ ๊ธธ์ด ๊ตฌํ๊ณ , count์ ์ ๊ฑฐ๋ 0๊ฐ์ ๋ํด์ฃผ๊ธฐ
deletezero = deleteZeroCount(copyS)
zerocount += copyS.count - deletezero
// deletezero ์ด์ง๋ฒ์ผ๋ก ๋ฐ๊พธ๊ธฐ
let result = makeBinaryScale(deletezero)
print(result)
if result != "10" {
copyS = result
} else {
rotation += 1
zerocount += 1
break
}
}
ans.append(rotation)
ans.append(zerocount)
return ans
}
func deleteZeroCount(_ s: String) -> Int {
var result = s.components(separatedBy: "0").joined().count
return result
}
func makeBinaryScale(_ num: Int) -> String {
var binaryNum = num
var result = ""
while true {
let quot = binaryNum / 2
let remainder = binaryNum % 2
if quot != 1 {
result += String(remainder)
binaryNum = quot
} else if quot == 1 {
result += String(remainder)
result += "1"
break
}
}
return String(result.reversed())
}
print(solution(s))
//print(makeBinaryScale(111))
๐ ์ ๋ต์ฝ๋
import Foundation
let s = "110010101001" // ๊ฒฐ๊ณผ [3, 8]
func solution(_ s: String) -> [Int] {
var zerocount = 0
var rotation = 0
var copyS = s
while copyS != "1" {
let deleteZeroNum = copyS.filter { $0 == "1" }
zerocount += copyS.count - deleteZeroNum.count
copyS = String(deleteZeroNum.count, radix: 2)
rotation += 1
}
return [rotation, zerocount]
}
print(solution(s))
์,, ์๊ฐ์์ด ๋ฐ๋ณต๋ฌธ ์ฐ๋ค๊ฐ ์๊ฐ์ด๊ณผ ๊ฑธ๋ ธ๋ค๊ณ ์๊ฐํ๋๋ฐ, ์๊ฐ๋ณด๋ค while๋ฌธ์ ์ค์๋ค๊ณ ์๊ฐ์ด๊ณผ๊ฐ ๋ฐ๋ก ํด๊ฒฐ๋์ง ์์๋ค. ๋ฉ์๋ ํ๋ํ๋ ์๊ฐ๋ณต์ก๋๋ฅผ ๋ฐ์ ธ๋ณด๋ฉด์ ์ฝ๋๋ฅผ ์์ฑํด์ผํจ์ ๊นจ๋ฌ์๋ค ใ
ใ
ใ
์ฐ์ ์๋ ์ฐธ๊ณ ๊ธ์ ์กฐ๊ธ ์ฐจ๊ทผ์ฐจ๊ทผ ์ ๋ ํด๋ณด์.
https://demian-develop.tistory.com/30