[Swift] ํ๋ก๊ทธ๋๋จธ์ค ์๊ฐ ์ฝ๋ ์ฑ๋ฆฐ์ง 2 2๊ฐ ์ดํ๋ก ๋ค๋ฅธ ๋นํธ

Problem
์ฝ๋ฉํ ์คํธ ์ฐ์ต - 2๊ฐ ์ดํ๋ก ๋ค๋ฅธ ๋นํธ
programmers.co.kr
Solution
์๋ ํ๋ฅผ ์ฐธ๊ณ ํ๋ฉด ๊ท์น์ด ์กฐ๊ธ ๋ณด์ด๋๋ฐ

1. ์ง์์ผ ๋
์ง์์ผ ๋๋ ๋ค์ ์ซ์์ 2์ง์ ๋งจ ๋ง์ง๋ง 0์ 1๋ก ๋ฐ๊ฟ์ฃผ๋ฉด ๋ฉ๋๋ค.
๊ณ ๋ก ๋ฐ๋ก ๊ทธ ๋ค์ ์ซ์์์ 2์ง์๋ ๋ฑ ํ์๋ฆฌ๋ง ๋ค๋ฅธ ๊ฒฝ์ฐ์ด๋ฏ๋ก ๋ฌด์กฐ๊ฑด n+1์ด ์ ์ผ ์์ ์ซ์๊ฐ ๋ฉ๋๋ค.
2. ํ์์ผ ๋
ํ์์ผ ๋๋ ๊ฐ์ฅ ๋ง์ง๋ง๋ฒ์งธ 0์ 1๋ก ๋ฐ๊พธ๊ณ ๊ทธ ๋ค์ ์ซ์๋ฅผ 0์ผ๋ก ๋ฐ๊ฟ์ค 2์ง์๊ฐ ์ ์ผ ์์ ์ซ์๊ฐ ๋ฉ๋๋ค.
๋ง์ฝ ๋ชจ๋ 1์ด๋ผ๋ฉด ๋งจ ์ฒซ๋ฒ์งธ ์ซ์๋ฅผ 0์ผ๋ก ๋ฐ๊ฟ์ฃผ๊ณ ๋งจ ์์ 1์ ์ถ๊ฐํด์ค๋๋ค.
ex) 1001 -> 1010, 111 -> 1011
Source Code
๋ฐฐ์ด์
์ง์์ผ ๋ 2์ง์๋ ๋์ด ๋ฌด์กฐ๊ฑด 0์ด๋ค.
ํ์์ผ ๋ 2์ง์๋ ๋์ด ๋ฌด์กฐ๊ฑด 1์ด๋ค.
2์ง์์์ ๊ทธ ๋ค์๋ฒ์งธ๋ก ์์ ์ซ์๋ฅผ ๊ตฌํ๋ ค๋ฉด ๋งจ ๋์ 0์ 1๋ก ๋ฐ๊ฟ์ฃผ๊ณ ๊ทธ ๋ค์ ์ซ์๋ฅผ 1๋ก ๋ฐ๊ฟ์ฃผ๋ฉด ๋๋ค.
๋ค๋ฅธ ์ฌ๋ ํ์ด ์ค ๋ฒ ์คํธ
๋๋ฌด ๊ฐ๋จํ๊ฒ ํ์๋๋ฐ | , ~, &, >> ๋ฑ ์ ํํ ๋ญ์ง ๋ชจ๋ฅธ๋ค.
๊ณต๋ถํด์ ๋๋ ์ ๋ ๊ฒ ๊ฐ๋จํ๊ฒ ๊ตฌํํด๋ด์ผ๊ฒ ๋ค.
func solution(_ numbers: [Int64]) -> [Int64] { return numbers.map(f) } func f(_ number: Int64) -> Int64 { return (number | ~number & (number + 1)) & ~((~number & (number + 1)) >> 1) }