[Algorithm] Add Binary
๋ฌธ์ ์ค๋ช
String์ผ๋ก ๋ค์ด์ค๋ ์ด์ง์ a์ b๋ฅผ ๋ํ ๊ฒฐ๊ณผ๋ฅผ String์ผ๋ก ๋ฐํํ๋ ๋ฌธ์ .
๋ฌธ์ ์ ์ค๋ช ๋, ์์๋ ์์ฃผ ์ฌํํ๋ค.
ํผ ๋ฐฉ๋ฒ
์ค๋ช ๊ณผ ์์๋ ์ฌํํ์ง๋ง ๋ด ์ฝ๋๋ ์ฌํํ์ง๊ฐ ์์๋คโฆ
func addBinary(_ a: String, _ b: String) -> String {
let longerBinaryArr: [String.Element]
let shortBinaryArr: [String.Element]
if a.count <= b.count {
longerBinaryArr = Array(b)
shortBinaryArr = Array(a)
} else {
longerBinaryArr = Array(a)
shortBinaryArr = Array(b)
}
var result: [Character] = []
var add = 0
for (idx, longerBinaryChar) in longerBinaryArr.reversed().enumerated() {
if shortBinaryArr.count - idx - 1 < 0 {
let longerBinaryInt = Int(longerBinaryChar.description) ?? 0
let addResult = addResult(longerBinaryInt + add)
result.insert(contentsOf: addResult.0, at: 0)
add = addResult.1
} else {
let shortBinaryChar = shortBinaryArr[shortBinaryArr.count - idx - 1]
let addResult = addResult((Int(longerBinaryChar.description) ?? 0) + (Int(shortBinaryChar.description) ?? 0) + add)
result.insert(contentsOf: addResult.0, at: 0)
add = addResult.1
}
}
if add == 1 {
result.insert("1", at: 0)
}
return String(result)
}
func addResult(_ result: Int) -> (String, Int) {
let string: String
let int: Int
switch result {
case 2:
string = "0"
int = 1
case 3:
string = "1"
int = 1
default:
string = String(result)
int = 0
}
return (string, int)
}
- ์ฐ์ Swift์์๋ subscript๋ก String์ ๊ธ์์ ์ ๊ทผํ ์ ์์ด์ ๋จผ์ Array๋ก String์ ๋ณํํด์ฃผ์๋ค.
- ๋ ๊ธธ๊ฒ ๋ค์ด์ค๋ string์ ๊ธฐ์ค์ผ๋ก for๋ฌธ์ ๋๊ธฐ ์ํด a์ b์ ๊ธธ์ด๋ฅผ ๋น๊ตํ๋ค.
- ๋ฐ๋ณต๋ฌธ์ ๋๋ฉด์ ๋ ์ด์ง์๋ฅผ ๋ํด์ฃผ์๋ค.
- addResult๋ผ๋ ๋ฉ์๋๋ฅผ ๋ฐ๋ก ๋นผ์ 2์ธ๊ฒฝ์ฐ, 3์ธ ๊ฒฝ์ฐ, ๋ ๋ค ์๋ ๊ฒฝ์ฐ๋ฅผ ๋ฐํํด์ ๋ฐ์์ฌ๋ฆผ์ด ์๋์ง์ ํด๋น ์๋ฆฌ์ ์ด๋ค ์ซ์๊ฐ ๋ค์ด๊ฐ์ผ ํ๋์ง ํ๋จํ๋๋ก ํ๋ค.
- ๋ง์ง๋ง ๋ฌธ์๊น์ง ์ฒดํฌํ ๋ค for๋ฌธ์ ๋น ์ ธ๋์์ ๋ add๊ฐ 1๋ก ์ค์ ๋์ด ์๋ค๋ฉด ๋ฐ์ ์ฌ๋ฆผ์ด ๋์ด ์๋ก์ด ์๋ฆฌ์๊ฐ ์๊ฒจ์ผ ํ๋ ๊ฒ์ ์ฒดํฌํ๋๋ก ํ๋ค.
- ์ตํ์ Character ๋ฐฐ์ด์ String์ผ๋ก ๋ณํํ์ฌ ๋ฆฌํดํ๋ค.
์๊ณ ๋ฆฌ์ฆ์ ํ๊ณ ์ถ์ง ์์ ๋๋ ์ด์ํ๊ฒ ์ฝ๋๊ฐ ๋๋ฌ์์ง๋ ๊ฒ ๊ฐ๋ค. (ํญ์ ํ๊ธฐ ๊ท์ฐฎ์ ๊ฒ ๊ฐ๊ธฐ๋ ํจ..^^)
Leave a comment