ํ๋ก๊ทธ๋๋จธ์ค - 2๊ฐ ์ดํ๋ก ๋ค๋ฅธ ๋นํธ
ํ๋ก๊ทธ๋๋จธ์ค - 2๊ฐ ์ดํ๋ก ๋ค๋ฅธ ๋นํธ
๋ฌธ์ ์ค๋ช
https://school.programmers.co.kr/learn/courses/30/lessons/77885
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
๋์ ํ์ด
2์ง์์ ๊ท์น์ ์ฐพ๋๋ฐ ์ด๋ ค์์ ๋ค๋ฅธ์ฌ๋์ ํ์ด๋ฅผ ๋ณด๊ณ ์ฐธ๊ณ ํ๋ค.
๋จผ์ 2์ง์์๋ ์ด๋ฐ ๊ท์น์ด ์๋ค.
1. ๋ชจ๋ ์ง์๋ ๋งจ ๋ง์ง๋ง์ด 0์ด๋ค.
2. ๋ชจ๋ ํ์๋ ๋งจ ๋ง์ง๋ง์ด 1์ด๋ค.
๊ทธ๋ฆฌ๊ณ ์ด ๋ฌธ์ ์์ 2๊ฐ ๋นํธ ์ดํ์ ์ฐจ์ด๋ง์ผ๋ก ๊ฐ์ฅ ์์ ์๋ฅผ ๊ตฌํ๋ ๋ฐฉ๋ฒ์ ํ์์ ์ง์๋ฅผ ๋ถ๋ฆฌํด์ ์ฐพ์์ผํ๋ค.
๊ฐ์ด ์ง์์ผ๋๋
๋งจ ๋ง์ง๋ง ์๋ฆฌ์ 0์ 1๋ก ๋ฐ๊ฟ์ฃผ๋ฉด ๋๋ค.
๊ฐ์ด ํ์์ผ๋๋
๋งจ ๋ง์ง๋ง๋ถํฐ ์ฒ์๊น์ง ํ์ํ๋ฉด์ 0์ด ๋์ค๋ ์๊ฐ 1๋ก ๋ฐ๊พธ๊ณ ๊ทธ ๋ค์ ์๋ฆฟ์๋ฅผ 0์ผ๋ก ๋ฐ๊พผ๋ค. -> ์ด ๊ฐ์ด 2๊ฐ ๋นํธ ์ดํ์ ์ฐจ์ด๋ง์ผ๋ก ๊ฐ์ฅ ์์ ์์ด๋ค.
์์๋ก 1001(9)์ ์ซ์๊ฐ ์์๋ ํ์์ ๊ท์น์ผ๋ก 1001 -> 1011 -> 1010์ด ๋๋ค๋ฉด ์ด ๊ฐ์ 10์ผ๋ก ๋๊ฐ์ ์๋ฆฌ๋ง ๋ฐ๋๊ณ 1๋ง ์ฆ๊ฐํ ์ซ์๊ฐ ๋๋ ๊ฒ์ด๋ค.
๊ทธ๋ผ 0์ด์๋ 111์ ๋ค์ ์ซ์๋ ์ด๋ป๊ฒ ๊ตฌํ๋ ๊ฒ์ผ๊น?
111์์ 0์ ๋ถ์ฌ์ฃผ๋ฉด ๋๋ค. "0111"์ ๋ ์์ ๊ท์น์ ์ ์ฉํ๋ฉด "1011"์ด ๋๋ค. ์ฆ 1011์ด ๊ท์น์ ๋ฐ๋ฅด๋ ๊ฐ์ฅ ์์ ๊ฐ์ด๋ค.
import Foundation
func solution(_ numbers:[Int64]) -> [Int64] {
return numbers.map{findMinNumber($0)}
}
func makeDecimalToBinary(_ num: Int64) -> String {
return "0" + String(num, radix:2)
}
func makeBinaryToDecimal(_ binary: String) -> Int64 {
return Int64(binary, radix: 2)!
}
func findMinNumber(_ num: Int64) -> Int64 {
var binaryData = makeDecimalToBinary(num).map{ String($0) }
for i in 0..<binaryData.count {
if binaryData[binaryData.count-(i+1)] == "0" {
binaryData[binaryData.count-(i+1)] = "1"
if i != 0 {
binaryData[binaryData.count-i] = "0"
}
break
}
}
return makeBinaryToDecimal(binaryData.joined())
}