42578. ์์ฅ
์ฝ๋ฉํ ์คํธ ์ฐ์ต - ์์ฅ
๋ฌธ์ ์ ํ | ๋์ด๋ | ๊ฑธ๋ฆฐ ์๊ฐ | ํด๊ฒฐ ์ ๋ฌด(โ /โ) |
---|---|---|---|
ํด์ | lv.2 | 2์๊ฐ | โ |
#
์ค๊ณ ๋ฐฉ๋ฒ#
์คํจMap ์๋ฃ๊ตฌ์กฐ์
์ข ๋ฅ : ์ท ๊ฐ์
๋ฅผ ๋ด๋๋ค.๊ฐ๋ฅํ ๋ชจ๋ ์์ ์กฐํฉ์ ์ฐพ๋๋ค.
getAllCombinations([...hashMap.values()])
์์์ ์ข ๋ฅ๊ฐ ํ๋๋ผ๋ฉด ์ท ๊ฐ์๋ฅผ ๋ํ๊ณ , ์์์ ์ข ๋ฅ๊ฐ ์ฌ๋ฌ ๊ฐ๋ผ๋ฉด ์ข ๋ฅ๋ณ ์ท๊ฐ์๋ฅผ ๋ชจ๋ ๊ณฑํด์ ์ต์ข ๊ฒฐ๊ณผ์ ๋ํ๋ค.
#
์ฑ๊ณต๊ฐ๋ฅํ ๋ชจ๋ ์กฐํฉ์ ์ง์ ๊ตฌํด์ ๊ณ์ฐํ์ง ์์.
์์์ ์ข ๋ฅ๋ฅผ ์ ์ง ์๋ ๊ฒฝ์ฐ๋ฅผ ์ถ๊ฐํด ๊ณ์ฐ.
์๋ฅผ ๋ค์ด ์ผ๊ตด : 3, ์์ : 2, ํ์ : 1 ์ด๋ผ๋ฉด ์ด ๊ฐ๋ฅํ ๊ฐ์๋
(3+1) * (2+1) * (1+1) -1 = 13
+1์ ์ฐฉ์ฉํ์ง ์์ ๊ฒฝ์ฐ๊ฐ ์ถ๊ฐ ๋๊ธฐ ๋๋ฌธ์ด๊ณ ๋ง์ง๋ง -1์ ์ท์ ์ ์ง ์์ ๊ฒฝ์ฐ๋์๊ธฐ ๋๋ฌธ
#
์ฝ๋#
์คํจfunction solution(clothes) { const hashMap = clothes.reduce( (acc, cur) => acc.set(cur[1], (acc.get(cur[1]) || 0) + 1), new Map(), );
let answer = getAllCombinations([...hashMap.values()]).reduce( (acc, cur) => acc + cur.reduce((acc, cur, idx) => (idx === 0 ? acc + cur : acc * cur), 0), 0, );
return answer;}
const getKCombinations = (set, k) => { const results = []; if (k === 1) { return set.map((i) => [i]); }
set.forEach((fixed, i, set) => { const combinations = getKCombinations(set.slice(i + 1), k - 1); results.push(...combinations.map((combination) => [fixed, ...combination])); });
return results;};
const getAllCombinations = (set) => { const results = []; for (let k = 1; k <= set.length; k++) { const kCombinations = getKCombinations(set, k); results.push(...kCombinations); } return results;};
#
์ฑ๊ณตconst solution = (clothes) => Object.values( clothes.reduce((acc, cur) => { acc[cur[1]] = (acc[cur[1]] || 1) + 1; return acc; }, {}), ).reduce((acc, cur) => (acc === 0 ? acc + cur : acc * cur), 0) - 1;
module.exports = solution;
#
์๊ฐ ๋ณต์ก๋#
์คํจhashMap ๊ตฌ์ฑ : O(N), getAllCombinations : O(nC1 + nC2 + nC3 + ... nCn) = O(2^n)
#
์ฑ๊ณตhashMap ๊ตฌ์ฑ : O(N), ๋งต ์ํ : O(M), (M < 4)
O(N)+ O(M)
#
์ด๋ ค์ ๋ ์ ํ ์คํธ ์ผ์ด์ค 1์ ๋ํด ๋ฐํ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋๋ฐ ์๋ง ์ฌ๊ท ํธ์ถ๋ก ์ธํ stack overflow ๋ฌธ์ ์ธ ๋ฏํ๋ค.
๋ชจ๋ ์กฐํฉ์ ๊ตฌํ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํํ๋๋ฐ, ์กฐํฉ ์๊ณ ๋ฆฌ์ฆ์ด ๊ฝค ์ด๋ ค์ ๋ค.
๊ตณ์ด ์กฐํฉ์ ๊ตฌํ์ง ์์๋ ๋๋ ์์์ ์ฐพ๋ ๊ฒ์ ์๊ฐ์ง ๋ชปํ๋ค.