ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - 2๊ฐœ ์ดํ•˜๋กœ ๋‹ค๋ฅธ ๋น„ํŠธ

2022. 10. 22. 10:13ใ†ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค-Swift

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - 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())
}