ํฐ์คํ ๋ฆฌ ๋ทฐ
ํน์ ๊ฐ์ ๋ง์กฑํ๋ ์กฐํฉ ๊ตฌํ๊ธฐ(ps.ํ์ด์ฌ์ ์์..)
choi95 2021. 8. 8. 00:55๋ฌธ์
n๊ฐ์ ์ ์๋ก ์ด๋ฃจ์ด์ง ๋ฆฌ์คํธ nums์ ์ ์ target์ด ์ฃผ์ด์ก์ ๋, num์ ์๋ ์ ์ 4๊ฐ๋ฅผ ํฉํ์ฌ target์ ๋ง๋ค ์ ์๋ ๋ชจ๋ ์กฐํฉ์ ๊ตฌํ์์ค.๋จ, ์ ๋ต์๋ ๋์ผํ ์ ์ ์กฐํฉ์ด ์ฌ๋ฌ๊ฐ ํฌํจ๋์ด์๋ ์๋๋ค.
๋ฌธ์ ํ์ด
- ์ค๋ณต์ ํ๋ฝํ์ง ์๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ํ์ธํ ์ ์๋ ์ฒดํฌ ๋ฐฐ์ด์ ์์ฑ
- ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์ ์ ์กฐํฉ์ ์ฌ๋ฌ๊ฐ ํฌํจ๋๋ฉด ์๋๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ์๋ณํ ์ ์๋ ๋ณ๋์ ๋ณ์ ์ ์ธ
- ๊น์ด ํ์์ ํตํด ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์กฐํฉ์ ์ ๋ต ๋ฆฌ์คํธ์ ํฌํจ์ํค๊ณ , ์ฒ์ ์ฌ๊ท๋ฅผ ์์ํ ๋ ํด๋น ์ ๋ต ๋ฆฌ์คํธ์ ํ์ฌ ๊ฒ์ฌํ๋ ์กฐํฉ์ด ํฌํจ๋์ด ์๋์ง ๊ฒ์ฌ_์กฐํฉ์ ์์๋ฅผ ๊ณ ๋ คํ์ง ์๊ธฐ ๋๋ฌธ์ ํ๊ณ , ์๋ค๋ฉด ๊ทธ๋๋ก ํจ์๋ฅผ ์ข ๋ฃ
์ฒ์์๋ 3๋ฒ ์กฐ๊ฑด์ ๋ง์กฑ์ํค๊ธฐ ์ํด forEach ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ํํ๋ ค๊ณ ํ์ง๋ง ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ฒฝ์ฐ๋ฅผ ์ฐพ์์ ๋ forEach๋ ์ฝ๋ฐฑ ํจ์๋ฅผ ์ข ๋ฃ์ํค์ง ์๊ณ ์์ ๋๊น์ง ์ํํ๋ฉด์ ์ํ๋ ๊ฒฐ๊ณผ๊ฐ์ ์ป์ง ๋ชปํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์๋ค.
forEach ๋ฉ์๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก break๋ฌธ์ ํ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ ์ด์ ๊ฐ์ ์ผ์ด ์๊ธด๊ฑด๋ฐ ์ฐพ์๋ณด๋ Array.prototype.some ๋ฉ์๋๊ฐ ์์๋ค.
some() ๋ฉ์๋๋ ๋ฐฐ์ด ์์ ์ด๋ค ์์๋ผ๋ ์ฃผ์ด์ง ํ๋ณ ํจ์๋ฅผ ํต๊ณผํ๋์ง ํ ์คํธํฉ๋๋ค.
์ ๋ต ๋ฆฌ์คํธ๋ 2์ฐจ์ ๋ฐฐ์ด์ด๊ธฐ ๋๋ฌธ์ some ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ ์์์ 1์ฐจ์ ๋ฐฐ์ด์ ์ํํ๋๋ก ํ๊ณ , ํด๋น 1์ฐจ์ ๋ฐฐ์ด์ filiter ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๋ฐฑ ํจ์๋ก ํ์ฌ ๊ฒ์ฌํ๊ณ ์ ํ๋ ์กฐํฉ ๋ฐฐ์ด tmp์ ๋ํด includes ๋ฉ์๋๋ก ํด๋น ์์๊ฐ ์๋์ง ์๋์ง ์๋ณํ์๋ค.
๋ง์ฝ์ ํ์ฌ ๊ฒ์ฌํ๊ณ ์ ํ๋ ์กฐํฉ ๋ฐฐ์ด tmp์ ๋ชจ๋ ๊ฐ์ด ์ ๋ต ๋ฆฌ์คํธ ๋ด์ ์กฐํฉ ์ค์ ํ๋๋ผ๋ ์๋ค๋ฉด includes ๋ฉ์๋์ ๋ํด์ ๋ชจ๋ ๋ฆฌํด ๊ฐ์ด true๊ฐ ๋๋ฏ๋ก ์ต์ข ์ ์ผ๋ก 1์ฐจ์ ๋ฐฐ์ด์์์ filiter ๋ฉ์๋๊ฐ ๋ฐํํ๋ ์๋ก์ด ๋ฐฐ์ด์ ๊ธธ์ด๋ 4(์ ์ ์กฐํฉ)๊ฐ ๋ ๊ฒ์ด๋ค.
๊ทธ๋์ ๋ฐฐ์ด์ ๊ธธ์ด๊ฐ 4๋ผ๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ค๋ฉด ์ดํ ์ํ๋ฅผ ๋ ํ ํ์ ์์ด some ๋ฉ์๋๋ true๋ฅผ ๋ฐํํ๊ณ ์ด๋ฅผ ์ด์ฉํ์ฌ 3๋ฒ์ ์กฐ๊ฑด์ ๋ง์กฑ์์ผฐ๋ค.
์ฝ๋
function solution(nums, target) {
let answer = [];
let tmp = Array.from({ length: 4 });
let ch = Array.from({ length: nums.length }, () => 0);
let ch2 = false;
function DFS(L) {
ch2 = answer.some((arr) => arr.filter((x) => tmp.includes(x)).length === 4);
if (ch2) return;
if (L === 4) {
if (tmp.reduce((a, b) => a + b) === target) {
answer.push([...tmp]);
}
} else {
for (let i = 0; i < nums.length; i++) {
if (ch[i] === 0) {
ch[i] = 1;
tmp[L] = nums[i];
DFS(L + 1);
ch[i] = 0;
}
}
}
}
DFS(0);
return answer;
}
let nums = [1, 0, -1, 0, -2, 2];
console.log(solution(nums, 0));
ํ์ด์ฌ itertools combinations
JS๋ฅผ ํตํด ์กฐ๊ฑด์ ๋ง๋ ์กฐํฉ์ ๊ตฌํ๊ธฐ ์ํด ๋ค์ ๊ธด(?) ์ฌ๊ท ํจ์๋ฅผ ์์ฑํ์๋ค.์ด์ ๋ฐํด ํ์ด์ฌ์ ๊ฐ๋จํ๊ฒ ์กฐํฉ์ ๊ตฌํ ์ ์๋ ๋ณ๋์ ํจ์์ธ itertools์ combinations๊ฐ ์์๋ค.
def solution(nums, target):
result = [items for items in intertools.combinations(nums, 4) if sum(items) == target]
return result
print(solution[1, 0, -1, 0, -2, 2], 0)
JS์์๋ ์กฐํฉ์ ๊ตฌํ๋ ๋ ๊ฐ๋จํ๊ณ ํจ์จ์ ์ธ ๋ฐฉ์์ด ์๋์ง ์ฐพ์๋ด์ผ๊ฒ ๋ค.
(ํ์ฌ Array.some ์ผ๋ก ์กฐํฉ์ ์กฐ๊ฑด์ ๋ง์กฑ์ํค๋ ๋ฐฉ๋ฒ์ ์ฝ๋ ์ ๋ณต์กํ๊ณ ์ ์์ ์ธ ๋ฐฉ๋ฒ์ด ์๋ ๊ฒ ๊ฐ๋ค..)
(์ถ๊ฐ_2021.08.08)
์กฐํฉ ๊ตฌํ๊ธฐ
์ด์ ์ ์กฐํฉ์ ๋ํ ์ ๋๋ก ๋ ์ดํด ์์ด Array.some ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์กฐํฉ์ ์์๋ฅผ ๊ณ ๋ คํ์ง ์๋๋ค ๋ผ๋ ์กฐ๊ฑด์ ๋ง์กฑ์์ผฐ๋๋ฐ ์ด๋ณด๋ค ๋ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ด ์์๋ค.
๋ค์ ๊ทธ๋ฆผ์ ํตํด ์ดํด๋ณด์.
function solution(n, m) {
let answer = [];
let tmp = Array.from({length: m}, () => 0);
function DFS(L, s) {
if(L === m) {
answer.push(tmp.slice())
}
else {
for(let i = s; i <= n; i++) { //๋ค์ ์ฌ๊ท์์์ ๋ฐ๋ณต๋ฌธ ์์์ 1๊ฐ์ฐ
tmp[L] = i;
DFS(L + 1, i + 1);
}
}
}
DFS(0, 1);
return answer;
}
console.log(solution(4, 2));
function solution(m, nums) {
let answer = [];
let tmp = Array.from({length: m}, () => 0);
let n = nums.length;
function DFS(L, s) {
if(L === m) {
if(tmp.reduce((a, b) => a +b) % 6 === 0) answer.push(tmp.slice());
}
else {
for(let i = s; i < n; i++) {
tmp[L] = nums[i];
DFS(L + 1, i + 1);
}
}
}
DFS(0, 0); //๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ฅผ ์ํ ๋ฐ ์ฐธ์กฐํด์ผ ๋๊ธฐ ๋๋ฌธ์ start๋ 0๋ถํฐ ์์
return answer;
}
let nums = [2, 4, 5, 8, 12]
console.log(solution(3, nums));
'์๊ณ ๋ฆฌ์ฆ > ํ๊ทธ ๋ณ ํ์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ธ์ ํ๋ ฌ]๊ฒฝ๋ก ํ์ (0) | 2021.08.09 |
---|---|
์์ด ์ถ์ธกํ๊ธฐ (0) | 2021.08.08 |
[๋ฉ๋ชจ์ด์ ์ด์ ]์กฐํฉ์ ๊ฒฝ์ฐ์ (0) | 2021.08.07 |
์์ด ๊ตฌํ๊ธฐ (0) | 2021.08.07 |
[DFS-Cut Edge]๋์ ๊ตํ (0) | 2021.08.06 |