๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“– Problem Solution/Programmers

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋‹ค์Œ ํฐ ์ˆซ์ž Swift

by Fomagran ๐Ÿ’ป 2020. 6. 21.
728x90
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ ์„ค๋ช…

์ž์—ฐ์ˆ˜ 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

 

ํ’€์ด: 

์กฐ๊ฑด 1์— ๋ถ€ํ•ฉํ•˜๊ธฐ ์œ„ํ•ด answer๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ n+1๋กœ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค. -> var answer:Int = n+1

๊ทธ๋ฆฌ๊ณค while๋ฌธ์„ ์‚ฌ์šฉํ•ด answer๋ฅผ ์กฐ๊ฑด์— ๋ถ€ํ•ฉํ•˜์ง€ ์•Š๋‹ค๋ฉด +1์„ ํ•ด์ค๋‹ˆ๋‹ค. ->  while true{ ... answer += 1 }

์กฐ๊ฑด 2์— ๋ถ€ํ•ฉํ•˜๊ธฐ ์œ„ํ•ด n์˜ 2์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ–ˆ์„ ๋•Œ 1์˜ ๊ฐฏ์ˆ˜๋ฅผ ์•Œ์•„๋ƒ…๋‹ˆ๋‹ค. ์šฐ์„  String(n,radix:2)๋ฅผ ํ†ตํ•ด 2์ง„์ˆ˜๋กœ ๋ฐ”๊ฟ”์ค€ ๋’ค map์œผ๋กœ ๊ฐ ๋ฌธ์ž๋“ค์„ ๋‚˜๋ˆ ์ค๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณค filter๋ฅผ ์‚ฌ์šฉํ•ด์„œ 1๋งŒ ๊ฑธ๋Ÿฌ๋‚ธ ๋’ค count๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ทธ๊ฒƒ์˜ ๊ฐฏ์ˆ˜๋ฅผ ์•Œ์•„๋ƒ…๋‹ˆ๋‹ค, -> let a = String(n, radix: 2).map{$0}.filter{$0 == "1"}.count

๋˜ํ•œ answer๋„ ๋˜‘๊ฐ™์ด 2์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•ด 1์˜ ๊ฐฏ์ˆ˜๋ฅผ ์•Œ์•„๋ƒ…๋‹ˆ๋‹ค. -> let b = String(answer, radix: 2).map{$0}.filter{$0 == "1"}.count

์กฐ๊ฑด 3์— ๋ถ€ํ•ฉํ•˜๊ธฐ ์œ„ํ•ด์„œ a์™€ b๋ฅผ ๋น„๊ตํ•ด์„œ ๋งŒ์•ฝ ๊ฐ™๋‹ค๋ฉด while๋ฌธ์„ ๋ฐ”๋กœ ํƒˆ์ถœํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.. -> if a == b{    break  } 

๊ทธ๋ฆฌ๊ณ  answer๋ฅผ ๋ฐ˜ํ™˜ํ•ด์ฃผ๋ฉด ์กฐ๊ฑด 1,2,3์— ๋ชจ๋‘ ์ถฉ์กฑ๋˜๋Š” ๋‹ต์„ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ->  return answer

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import Foundation
 
func solution(_ n:Int-> Int
{
    var answer:Int = n+1
    while true{
        let a = String(n, radix: 2).map{$0}.filter{$0 == "1"}.count
        let b = String(answer, radix: 2).map{$0}.filter{$0 == "1"}.count
        if a == b{
            break
        }
        answer += 1
    }
    
    return answer
}

 

๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ํ’€์ด:

nonzeroBitCount๋ผ๋Š” ๊ฒƒ์„ ์‚ฌ์šฉํ•ด์ฃผ๋ฉด ์ด์ง„์ˆ˜์—์„œ 1์˜ ๊ฐฏ์ˆ˜๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.!!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import Foundation
 
func solution(_ n:Int-> Int {
    var answer : Int = n + 1
 
    while true {
        if n.nonzeroBitCount == answer.nonzeroBitCount {
            break;
        }
        answer += 1
    }
 
    return answer
}

 

 

 

728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€