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

[Swift] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์›”๊ฐ„ ์ฝ”๋“œ ์ฑŒ๋ฆฐ์ง€ 2 2๊ฐœ ์ดํ•˜๋กœ ๋‹ค๋ฅธ ๋น„ํŠธ

by Fomagran ๐Ÿ’ป 2021. 7. 3.
728x90
๋ฐ˜์‘ํ˜•

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) }
728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€