[ํ๋ก๊ทธ๋๋จธ์ค Lv.2] 2๊ฐ ์ดํ๋ก ๋ค๋ฅธ ๋นํธ (js)
https://programmers.co.kr/learn/courses/30/lessons/77885?language=javascript#
์ฝ๋ฉํ ์คํธ ์ฐ์ต - 2๊ฐ ์ดํ๋ก ๋ค๋ฅธ ๋นํธ
programmers.co.kr
function solution(numbers) {
return numbers.map(v => {
let str = '0'+v.toString(2);
if(str[str.length-1] === '0') {
str = str.substring(0, str.length-1) + '1';
} else {
const idx = str.lastIndexOf('01');
str = str.substring(0,idx) + '10' + str.substring(idx+2, str.length);
}
return parseInt(str, 2);
})
}
์ด ๋ฌธ์ ๋ ๊ทธ๋ฅ ์ง์๋ณํํ๊ณ ์ซ์ ํ๋์ฉ ๋๋ ค๊ฐ๋ฉฐ ๋น๊ตํ๋ฉด์ ํ๋ฉด 11๋ฒ, 12๋ฒ ์๊ฐ์ด๊ณผ๊ฐ ๋ฌด์กฐ๊ฑด! ๋๋ค.
์ง์์ผ๋๋ฅผ ์๊ฐํด๋ณด์. ์ง์๋ผ๋๊ฑด 2์ง์๋ก ๋ณํํ์ ๋ ๋งจ ๋ค ์ซ์๊ฐ 0์ผ ๊ฒ์ด๋ค. ex) 010 => 2, 011 => 3
์ง์์ผ ๋ ๊ธฐ์กด ๊ฐ๋ณด๋ค ํ๋ ๋์ธ ๊ฐ์ด ํด๋น ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ฐ์ฅ ์์ ์ซ์์ด๋ค.
์ด์ ํ์์ผ ๋ ์๊ฐ์ ํด๋ณด์. ํ์์ผ ๋ ํ ๊ฐ๋ง ๋ฐ๊พธ๊ธฐ์ ๊ฐ๋ค์ ์์ธกํ ์ ์๋ค. ํ๋ ์กฐ๊ฑด์์ ๊ฐ๋ณด๋ค ํฐ ๊ฒ์ค์ ์ฐพ์์ผ ํ๋ฏ๋ก
๋ค๋ถํฐ '01' ์ ์ฐพ๊ณ ์ด๋ฅผ '10'์ผ๋ก ๋ฐ๊ฟ์ฃผ๋ฉด ๋๋ค. ๋ค๋ถํฐ ์ฐพ์ผ๋ฉฐ ๊ฐ์ ์ต์ํ ํ ์ ์๋ ๊ฒ์ ์ฐพ์์ผ ํ๋ฏ๋ก, ํ์์์ '01'์ '10'์ผ๋ก ๋ฐ๊พธ๋ ๊ฒ์ด ์ต์ ์ด๋ค. ex) 011 => 101 , 010101 => 010110
์ด๋ฅผ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ฒ๋ฆฌํ๋ฉด ์์ฒ๋ผ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ค.