๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
3๏ธโƒฃ Swift/Problem Solving

[Swift Algorithm] ๋‹ค์Œ ํฐ ์ˆซ์ž Programmers(Lv.2)

by seolhee2750 2021. 7. 8.
๋ฌธ์ œ ์„ค๋ช…

์ž์—ฐ์ˆ˜ n์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, n์˜ ๋‹ค์Œ ํฐ ์ˆซ์ž๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •์˜ ํ•ฉ๋‹ˆ๋‹ค.

  • ์กฐ๊ฑด 1. n์˜ ๋‹ค์Œ ํฐ ์ˆซ์ž๋Š” n๋ณด๋‹ค ํฐ ์ž์—ฐ์ˆ˜ ์ž…๋‹ˆ๋‹ค.
  • ์กฐ๊ฑด 2. n์˜ ๋‹ค์Œ ํฐ ์ˆซ์ž์™€ n์€ 2์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ–ˆ์„ ๋•Œ 1์˜ ๊ฐฏ์ˆ˜๊ฐ€ ๊ฐ™์Šต๋‹ˆ๋‹ค.
  • ์กฐ๊ฑด 3. n์˜ ๋‹ค์Œ ํฐ ์ˆซ์ž๋Š” ์กฐ๊ฑด 1, 2๋ฅผ ๋งŒ์กฑํ•˜๋Š” ์ˆ˜ ์ค‘ ๊ฐ€์žฅ ์ž‘์€ ์ˆ˜ ์ž…๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด์„œ 78(1001110)์˜ ๋‹ค์Œ ํฐ ์ˆซ์ž๋Š” 83(1010011)์ž…๋‹ˆ๋‹ค.

์ž์—ฐ์ˆ˜ n์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, n์˜ ๋‹ค์Œ ํฐ ์ˆซ์ž๋ฅผ return ํ•˜๋Š” solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.

 

์ œํ•œ ์กฐ๊ฑด
  • n์€ 1,000,000 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜ ์ž…๋‹ˆ๋‹ค.

 

์ž…์ถœ๋ ฅ ์˜ˆ
n result
78 83
15 23

 

๋‚ด ๋ฌธ์ œ ํ’€์ด
func solution(_ n:Int) -> Int {
    let binaryNum = String(n, radix: 2) // n์„ ์ด์ง„์ˆ˜๋กœ ๋ณ€๊ฒฝ
    let count1 = binaryNum.map({$0}).filter({$0 == "1"}).count // n ์ด์ง„์ˆ˜์˜ 1 ๊ฐœ์ˆ˜
    var result = n + 1 // n๋ณด๋‹ค 1 ํฐ ์ž์—ฐ์ˆ˜
    
    while String(result, radix: 2).map({$0}).filter({$0 == "1"}).count != count1 {
        result += 1
    }

    return result
}
  • ์ž…๋ ฅ ๊ฐ’์„ radix๋ฅผ ์‚ฌ์šฉํ•ด 2์ง„์ˆ˜๋กœ ๋ณ€๊ฒฝํ•ด์ฃผ์—ˆ๋‹ค.
  • 2์ง„์ˆ˜๋กœ ๋ณ€๊ฒฝํ•œ ๊ฐ’์€ String์ด๊ธฐ ๋•Œ๋ฌธ์—, map๊ณผ filter๋ฅผ ์‚ฌ์šฉํ•ด 1์˜ ๊ฐœ์ˆ˜๋ฅผ ์ฐพ์•˜๋‹ค.
  • while์„ ์‚ฌ์šฉํ•ด n๋ณด๋‹ค ํฐ ์ˆ˜์˜ 2์ง„์ˆ˜ 1์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ž…๋ ฅ ๊ฐ’ 2์ง„์ˆ˜์˜ 1 ๊ฐœ์ˆ˜์™€ ๊ฐ™์„ ๋•Œ๊นŒ์ง€ ์ˆซ์ž๋ฅผ ํ•˜๋‚˜์”ฉ ํ‚ค์› ๋‹ค.

 

๐Ÿ’ก ํ”ผ๋“œ๋ฐฑ
  • ์ฝ”๋“œ๊ฐ€ ์กฐ๊ธˆ ๋ณต์žกํ•ด์„œ ๊ฐ€๋…์„ฑ์žˆ๊ฒŒ ๋ฐ”๊พธ๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค.

 


 

๐Ÿ– [ ์ถ”๊ฐ€ ] 1์ฃผ์ผ ํ›„ ๋‹ค์‹œ ํ’€์–ด๋ณด๊ธฐ

func solution(_ n:Int) -> Int {
    var nNext = n + 1
    let nBinary_1 = String(n, radix: 2).map{$0}.filter{$0 == "1"}.count
    
    while true {
        let nNextBinary_1 = String(nNext, radix: 2).map{$0}.filter{$0 == "1"}.count
        if nNextBinary_1 == nBinary_1 { return nNext }
        else { nNext += 1 }
    }
}
  • ์ฒซ ๋ฒˆ์งธ ํ’€์ด์™€ ๋กœ์ง์€ ๊ฐ™์€๋ฐ, while ์กฐ๊ฑด์„ true๋กœ ์จ๋ฒ„๋ฆฌ๊ณ  ์กฐ๊ฑด์„ ์•ˆ์— ๋„ฃ์–ด์ฃผ์—ˆ๋‹ค.
  • ๋” ๊น”๋”ํ•˜๊ณ  ๊ดœ์ฐฎ์€ ๊ฒƒ ๊ฐ™๋‹ค.

 


 

๋ฌธ์ œ

https://programmers.co.kr/learn/courses/30/lessons/12911

 

๋Œ“๊ธ€