[Algorithm] ํ๋ก๊ทธ๋๋จธ์ค ๋น๋ฐ์ง๋ ๋ฌธ์ ํ์ด
๊ธ ์์ ์ฌํญ์ ๋ ธ์ ํ์ด์ง์ ๊ฐ์ฅ ๋น ๋ฅด๊ฒ ๋ฐ์๋ฉ๋๋ค. ๋งํฌ๋ฅผ ์ฐธ๊ณ ํด ์ฃผ์ธ์
2018๋
์นด์นด์ค ๋ธ๋ผ์ธ๋ ํ
์คํธ 1์ฐจ ๋น๋ฐ์ง๋ ๋ฌธ์ (๋ฌธ์ ๋ฒํธ 17681). ํ๋ผ๋ฏธํฐ๋ arr1
arr2
n
์ด๋ ๊ฒ 3๊ฐ๋ฅผ ๋ฐ์ผ๋ฉฐ, n
์ ํ ๋ณ์ ๊ธธ์ด๋ฅผ ๋ํ๋ธ๋ค(๋ฐฐ์ด ๊ฐ ์์๋ฅผ ์ด์ง์๋ก ๋ณํํ ํ์ length
).
โถ 2๊ฐ์ ๋ฐฐ์ด์ ๋ฐ์
[9, 20, 28, 18, 11]; // arr1
[30, 1, 21, 17, 28]; // arr2
โท ๋ฐฐ์ด์ ๊ฐ ์์๋ฅผ 2์ง์๋ก ๋ณํํ ๋ค (10์ง์ → 2์ง์ ๋ณํ์ ๋ ธํธ ์ฐธ๊ณ )
['01001', '10100', '11100', '10010', '01011']; // arr1
['11110', '00001', '10101', '10001', '11100']; // arr2
โธ 0
→ ' '
๊ณต๋ฐฑ, 1
→ #
์ผ๋ก ๋ณํ
[' # #', '# # ', '### ', '# # ', ' # ##']; // arr1
['#### ', ' #', '# # #', '# #', '### ']; // arr2
โน ๊ฐ ๋ฐฐ์ด ๋ณํฉ. arr1[i][j]
์ arr2[i][j]
๋ฅผ ๋น๊ตํ ๋ ๋ ์ค ํ๋๋ผ๋ #
์ด๋ฉด ๊ทธ๋๋ก #
์ฌ์ฉ
// arr1, arr2 ์ฒซ๋ฒ์งธ ์์ ๋น๊ต
' # #'
'#### '
-------
'#####'
๊ฒฐ๊ณผ โผ
["#####","# # #", "### #", "# ##", "#####"];
โบ ํด๊ฒฐ ๋ฐฉ์์ ๊ทธ๋ฆผ์ผ๋ก ํํํ๋ฉด ์๋์ ๊ฐ๋ค
๋ด๊ฐ ํผ ๋ฐฉ์
map
, reduce
๋ฅผ ์ด์ฉํด์ ์์์ ์ผ๋ก ํ์๋ค.
โถ ๋ฐฐ์ด ๊ฐ ์์๋ฅผ 2์ง์๋ก ๋ณํ
const convertToBinary = (arr) => {
return arr.reduce((acc, cur) => {
let converted = cur.toString(2);
converted = '0'.repeat(n - converted.length) + converted;
return acc.concat(converted);
}, []);
};
const map1 = convertToBinary(arr1);
const map2 = convertToBinary(arr2);
์ผ๋ถ ์ซ์๋ ์ด์ง์ ๋ณํ ํ์ length
๊ฐ n
๋ณด๋ค ์๊ธฐ ๋๋ฌธ์ repeat()
๋ฉ์๋๋ก ์๋ฆฟ์๋ฅผ ๋ง์ถฐ์ค๋ค.
// length(์๋ฆฟ์)๊ฐ ๋ง์ง ์๊ธฐ ๋๋ฌธ์ ๋ ์ด์ง์๋ฅผ ๋น๊ตํ๊ธฐ ์ ๋งคํ๋ค
'1001'; // ์ซ์ 9 ์ด์ง์(arr1[0][0])
'11110'; // ์ซ์ 30 ์ด์ง์(arr2[0][0])
// repeat ๋ฉ์๋๋ฅผ ์ฌ์ฉํด ์ซ์ 9 ์ด์ง์์ ๋ถ์กฑํ ์๋ฆฟ์๋งํผ '0' ์ถ๊ฐ
// n์ 5๋ผ๊ณ ๊ฐ์
'0'.repeat(n - '1001'.length) + '1001'; // '01001'
โท 0
→ ' '
๊ณต๋ฐฑ, 1
→ #
์ผ๋ก ๋ณํ — ์ด ๋ถ๋ถ์ OR
๋นํธ ์ฐ์ฐ์๋ก ๊น๋ํ๊ฒ ํ ์ ์๋ค
return map1.map((el, i1) =>
el
.split('')
.reduce(
(acc, cur, i2) =>
cur === '1' || map2[i1][i2] === '1' ? acc + '#' : acc + ' ',
'',
),
);
๋ ํผ๋ฐ์ค ์ฝ๋ ๋ถ์
๋นํธ ์ฐ์ฐ์
๐ก ๋นํธ๋ ์ด์ง(Binary) ์ซ์๋ง ์ฌ์ฉํ๋ค. ๋นํธ ์ฐ์ฐ์๋ ๋นํธ ์์ค์์ ๋ณ์์ ์ํธ ์์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ค. ๋นํธ ์์ค์์์ ํ๊ฐ๋ ์ผ๋ฐ ๋ ผ๋ฆฌ์ฐ์ฐ์๋ณด๋ค ์๋๊ฐ ๋น ๋ฅด๋ค.
์ข์์๋ฅผ ๊ฐ์ฅ ๋ง์ด ๋ฐ์ ๋ค๋ฅธ ์ฌ๋ ์ฝ๋๋ฅผ ๋ณด๋ ์ ๋ง ๊น๋ํ๋ค. v | arr2[i]
์ ์ฝ๋๋ ๋จ์ํ OR
์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ง ์์๋๋ฐ ์์ธํ ๋ณด๋ Vertical Bar |
๊ฐ ํ๋๋ฐ์ ์๋ค. ์ฐพ์๋ณด๋ ๋นํธ์ฐ์ฐ์์ OR
์ด๋ค.
function solution2(n, arr1, arr2) {
return arr1.map((v, i) =>
addZero(n, (v | arr2[i]).toString(2)).replace(/1|0/g, (a) =>
+a ? '#' : ' ',
),
);
}
const addZero = (n, s) => {
return '0'.repeat(n - s.length) + s;
};
๋นํธ ์ฐ์ฐ์์ |
(OR)์ ||
๋
ผ๋ฆฌ ์ฐ์ฐ์์ ๋น์ทํ๋ค. ๋น๊ตํ๋ ๋นํธ๊ฐ 0
๊ณผ 1
์ด๋ผ๋ฉด 1
์ ๋ฐํํ๋ค. ๋ฌธ์ ์์ ์๊ตฌํ๋ ๋ก์ง(๋น๊ตํ๋ ๊ฐ์ด 0
ํน์ 1
์ด๋ฉด 1
๋ฐํ)์ OR
๋นํธ ์ฐ์ฐ์๋ฅผ ์ ์ฉํ๋ฉด ์ ํํ ๋ง์๋จ์ด์ง๋ค.
console.log(46 | 27); // 63
46์ 2์ง์๋ 101110, 27์ 2์ง์๋ 11011
101110 (46)
011011 (27)
------
111111 (63)
str.replace / ์ ๊ท์
str.replace(regexp|substr, newSubstr|function)
replace()
๋ฉ์๋์ ์ฒซ๋ฒ์งธ ์ธ์์ ์ ๊ท์๋ ์ฌ ์ ์๋ค. ๋๋ฒ์งธ ์ธ์์ ์ผ์นํ๋ ์์์ ์ด๋ค ๋ก์ง์ ์ํํ ์ง์ ๋ํ ์ฝ๋ฐฑ์ ๋๊ธธ ์ ์๋ค.
'01001'.replace(/0|1/g, '*'); // '*****'
'01001'.replace(/0|1/g, (n) => (Number(n) ? ' ' : '#')); // '# ## '
// 0์ false๋ก ํ๊ฐ๋๋ฏ๋ก ' ' ๋น๋ฌธ์์ด ๋ฐํ, ๊ทธ ์ธ์ '#' ๋ฐํ
์ฐธ๊ณ ๋ก ์ ๊ท์์์ |
๊ต์ฒด๊ตฌ๋ฌธ์ OR ์ฐ์ฐ์์ ๋์ผํ๋ค.
const re = /0|1/;
'01001'.match(re); // ['0', index: 0, input: '01001', groups: undefined]
์ ๊ท์์์ g
(์ ์ญ๊ฒ์) ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ๋ฉด ํจํด๊ณผ ์ผ์นํ๋ ๋ชจ๋ ๋ด์ฉ์ ์ฐพ๋๋ค. g
ํ๋๊ทธ๊ฐ ์์ผ๋ฉด ํจํด๊ณผ ์ผ์นํ๋ ์ฒซ๋ฒ์งธ ๊ฒฐ๊ณผ๋ง ๋ฐํํ๋ค.
const re = /0|1/g;
'01001'.match(re); // ['0', '1', '0', '0', '1']
์ฝ๋ ํ์ด
โถ arr1
์์ ์ํ
โท arr1[i]
arr2[i]
์ OR
๋นํธ ์ฐ์ฐ์ ์ ์ฉ
// arr1[i]๋ 14, arr2[i]๋ 22๋ก ๊ฐ์
14 | 22; // 30
/*
01110 (14)
10110 (22)
-----
11110 (30)
*/
โธ ์ด์ง์ ๋ณํ
(30).toString(2); // '11110'
โน ๋ถ์กฑํ ์๋ฆฌ์์ '0'
์ถ๊ฐ
const addZero = (n, s) => '0'.repeat(n - s.length) + s;
// n์ 6(์ด๋ผ๊ณ ๊ฐ์ ), s๋ '11110'
addZero(6, '11110'); // '011110'
โบ 0
→ ' '
, 1
→ #
์ผ๋ก ๋ณํ
'011110'.replace(/1|0/g, (n) => (+n ? '#' : ' ')); // ' #### '
// +'0' ํํ๋ก ์์ฑํ๋ฉด ์ซ์๋ก ํ๋ณํ. Number('0')๊ณผ ๋์ผ
'๐ช Programming' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
[JS] ์๋ฐ์คํฌ๋ฆฝํธ RORO ๋์์ธ ํจํด / ์คํ ํธ๋ ์ด์ค / ์๋ฌ ์ ํ
[JS] ์๋ฐ์คํฌ๋ฆฝํธ RORO ๋์์ธ ํจํด / ์คํ ํธ๋ ์ด์ค / ์๋ฌ ์ ํ
2024.05.01 -
[React] ๋ฆฌ์กํธ ๋ผ์ฐํฐ React Router v6 ๋ฐ๋์ ํบ์๋ณด๊ธฐ
[React] ๋ฆฌ์กํธ ๋ผ์ฐํฐ React Router v6 ๋ฐ๋์ ํบ์๋ณด๊ธฐ
2024.04.30 -
[AWS] EC2 ๋์คํฌ ๊ณต๊ฐ ๋๋ฆฌ๊ธฐ / ์ฌ์ ๊ณต๊ฐ ํ๋ณดํ๊ธฐ
[AWS] EC2 ๋์คํฌ ๊ณต๊ฐ ๋๋ฆฌ๊ธฐ / ์ฌ์ ๊ณต๊ฐ ํ๋ณดํ๊ธฐ
2024.04.30 -
[JS] ์ ๊ท์์ผ๋ก ๊ฒ์์ด ํ์ด๋ผ์ดํธ / ๋ฌธ์์ด ๋งํฌ ๊ฑธ๊ธฐ(Linkify)
[JS] ์ ๊ท์์ผ๋ก ๊ฒ์์ด ํ์ด๋ผ์ดํธ / ๋ฌธ์์ด ๋งํฌ ๊ฑธ๊ธฐ(Linkify)
2024.04.30