๋ฌธ์ ์ค๋ช
์์ฐ์ 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
'3๏ธโฃ Swift > Problem Solving' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift Algorithm] ๊ฐ์ฅ ํฐ ์ ์ฌ๊ฐํ ์ฐพ๊ธฐ Programmers(Lv.2) (0) | 2021.07.20 |
---|---|
[Swift Algorithm] ์ฌ๋ฐ๋ฅธ ๊ดํธ Programmers(Lv.2) (4) | 2021.07.08 |
[Swift Algorithm] ์ต๋๊ฐ๊ณผ ์ต์๊ฐ Programmers(Lv.2) (0) | 2021.07.08 |
[Swift Algorithm] ํผ๋ณด๋์น ์ Programmers(Lv.2) (0) | 2021.07.08 |
[Swift Algorithm] ํ๋ ฌ์ ๊ณฑ์ Programmers(Lv.2) (0) | 2021.07.08 |
๋๊ธ