๐ ์ฝ๋ฉํ ์คํธ
โ๐ป Github
๋ฌธ์ ์ค๋ช
0๊ณผ 1๋ก ์ด๋ฃจ์ด์ง ์ด๋ค ๋ฌธ์์ด x์ ๋ํ ์ด์ง ๋ณํ์ ๋ค์๊ณผ ๊ฐ์ด ์ ์ํฉ๋๋ค.
- x์ ๋ชจ๋ 0์ ์ ๊ฑฐํฉ๋๋ค.
- x์ ๊ธธ์ด๋ฅผ c๋ผ๊ณ ํ๋ฉด, x๋ฅผ "c๋ฅผ 2์ง๋ฒ์ผ๋ก ํํํ ๋ฌธ์์ด"๋ก ๋ฐ๊ฟ๋๋ค.
์๋ฅผ ๋ค์ด, x = "0111010"์ด๋ผ๋ฉด, x์ ์ด์ง ๋ณํ์ ๊ฐํ๋ฉด x = "0111010" -> "1111" -> "100" ์ด ๋ฉ๋๋ค.
0๊ณผ 1๋ก ์ด๋ฃจ์ด์ง ๋ฌธ์์ด s๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง๋๋ค. s๊ฐ "1"์ด ๋ ๋๊น์ง ๊ณ์ํด์ s์ ์ด์ง ๋ณํ์ ๊ฐํ์ ๋, ์ด์ง ๋ณํ์ ํ์์ ๋ณํ ๊ณผ์ ์์ ์ ๊ฑฐ๋ ๋ชจ๋ 0์ ๊ฐ์๋ฅผ ๊ฐ๊ฐ ๋ฐฐ์ด์ ๋ด์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ์ฌํญ
- s์ ๊ธธ์ด๋ 1 ์ด์ 150,000 ์ดํ์ ๋๋ค.
- s์๋ '1'์ด ์ต์ ํ๋ ์ด์ ํฌํจ๋์ด ์์ต๋๋ค.
์ ์ถ๋ ฅ ์
s | result |
"110010101001" | [3,8] |
"01110" | [3,3] |
"1111111" | [4,1] |
์ ์ถ๋ ฅ ์ ์ค๋ช
์ ์ถ๋ ฅ ์ #1
- "110010101001"์ด "1"์ด ๋ ๋๊น์ง ์ด์ง ๋ณํ์ ๊ฐํ๋ ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
ํ์ฐจ ์ด์ง ๋ณํ ์ด์ ์ ๊ฑฐํ 0์ ๊ฐ์ 0 ์ ๊ฑฐ ํ ๊ธธ์ด ์ด์ง ๋ณํ ๊ฒฐ๊ณผ
1 | "110010101001" | 6 | 6 | "110" |
2 | "110" | 1 | 2 | "10" |
3 | "10" | 1 | 1 | "1" |
- 3๋ฒ์ ์ด์ง ๋ณํ์ ํ๋ ๋์ 8๊ฐ์ 0์ ์ ๊ฑฐํ์ผ๋ฏ๋ก, [3,8]์ return ํด์ผ ํฉ๋๋ค.
์ ์ถ๋ ฅ ์ #2
- "01110"์ด "1"์ด ๋ ๋๊น์ง ์ด์ง ๋ณํ์ ๊ฐํ๋ ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
ํ์ฐจ ์ด์ง ๋ณํ ์ด์ ์ ๊ฑฐํ 0์ ๊ฐ์ 0 ์ ๊ฑฐ ํ ๊ธธ์ด ์ด์ง ๋ณํ ๊ฒฐ๊ณผ
1 | "01110" | 2 | 3 | "11" |
2 | "11" | 0 | 2 | "10" |
3 | "10" | 1 | 1 | "1" |
- 3๋ฒ์ ์ด์ง ๋ณํ์ ํ๋ ๋์ 3๊ฐ์ 0์ ์ ๊ฑฐํ์ผ๋ฏ๋ก, [3,3]์ return ํด์ผ ํฉ๋๋ค.
์ ์ถ๋ ฅ ์ #3
- "1111111"์ด "1"์ด ๋ ๋๊น์ง ์ด์ง ๋ณํ์ ๊ฐํ๋ ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
ํ์ฐจ ์ด์ง ๋ณํ ์ด์ ์ ๊ฑฐํ 0์ ๊ฐ์ 0 ์ ๊ฑฐ ํ ๊ธธ์ด ์ด์ง ๋ณํ ๊ฒฐ๊ณผ
1 | "1111111" | 0 | 7 | "111" |
2 | "111" | 0 | 3 | "11" |
3 | "11" | 0 | 2 | "10" |
4 | "10" | 1 | 1 | "1" |
- 4๋ฒ์ ์ด์ง ๋ณํ์ ํ๋ ๋์ 1๊ฐ์ 0์ ์ ๊ฑฐํ์ผ๋ฏ๋ก, [4,1]์ return ํด์ผ ํฉ๋๋ค.
๋ฌธ์ ํ์ด
๋์ ํ์ด
import Foundation
func solution(_ s:String) -> [Int] {
var n = 0, count = 0
func binaryTranslation(numStr: String) -> [Int] {
if numStr == "1" {
return [n, count]
}
var length = numStr.filter{ $0 == "1" }.count
count += numStr.count - length
n += 1
return binaryTranslation(numStr: String(length, radix: 2))
}
return binaryTranslation(numStr: s)
}
๋ฌธ์ ๋ฅผ ๋ณด์๋ง์ ์ฌ๊ทํจ์๋ก ํ์ด์ผ ๊ฒ ๋ค๊ณ ์๊ฐํ๋ค.
์ฐ์ “0” ์ ์ ๊ฑฐํ๋ ๋ฐฉ๋ฒ์ผ๋ก filter๋ฅผ ๋ ์ฌ๋ ธ๊ณ , ์ฌ๊ทํจ์๋ฅผ ๋น ์ ธ๋๊ฐ๋ ์กฐ๊ฑด๋ฌธ์ ์์ ๋ค.
๋ง์นจ ์ด์ [1์ฐจ] ๋น๋ฐ์ง๋๋ฅผ ํ๋ฉด์ ์ญ์ง๋ฒ์ ์ด์ง๋ฒ์ผ๋ก ๋ฐ๊พธ๋ ํจ์๋ฅผ ํ์ตํ์ฌ ๋จธ๋ฆฟ์์ ์์ง ๋จ์์์๋ค.
ํ๋ฒ ๋ ๋ณต์ตํ๋ ๊ณ๊ธฐ๊ฐ ๋์ด์ ์์ฃผ ์ข๋ค!
๋ค๋ฅธ ์ฌ๋ ํ์ด
import Foundation
func solution(_ s: String) -> Array<Int> {
var copiedS = s
var removedZero = 0
var count = 0
while copiedS != "1" {
removedZero += copiedS.replacingOccurrences(of: "1", with: "").count
copiedS = String(copiedS.replacingOccurrences(of: "0", with: "").count, radix: 2)
count += 1
}
return [count, removedZero]
}
์ด๋ถ์ ๋๋ ๋ฌ๋ฆฌ ๋ฐ๋ณต๋ฌธ์ ํ์๋ค. 1๊ณผ 0์ ์์ ๋ ๊ณผ์ ์ replacingOccurrences๋ฅผ ์ด์ฉํด count๋ฅผ ํ๋ค. ์ ๊ธฐํ๋ค.
์ค์ํ ๊ฐ๋
- ์ญ์ง๋ฒ์ ์ด์ง๋ฒ์ผ๋ก ๋ฐ๊พธ๋ ํจ์
String(๋ฐ๊พธ๋ ค๋ Int๊ฐ, radix: 2)