๐ ๋ฌธ์
๋ ์คํ ๋์ ์ด์ํ๊ณ ์๋ "์ค์นดํผ"๋ ๋ ์คํ ๋ ๋ด๋ถ๊ฐ ๋๋ฌด ๋ก์ ์น๊ตฌ๋ค๊ณผ ํจ๊ป ์ง์ ๋ฆฌ๋ชจ๋ธ๋ง ํ๊ธฐ๋ก ํ์ต๋๋ค. ๋ ์คํ ๋์ด ์๋ ๊ณณ์ ์ค๋
ธ์ฐํ์ด์ผ๋ก ๋งค์ฐ ์ถ์ด ์ง์ญ์ด์ด์ ๋ด๋ถ ๊ณต์ฌ๋ฅผ ํ๋ ๋์ค์ ์ฃผ๊ธฐ์ ์ผ๋ก ์ธ๋ฒฝ์ ์ํ๋ฅผ ์ ๊ฒํด์ผ ํ ํ์๊ฐ ์์ต๋๋ค.
๋ ์คํ ๋์ ๊ตฌ์กฐ๋ ์์ ํ ๋๊ทธ๋ ๋ชจ์์ด๊ณ ์ธ๋ฒฝ์ ์ด ๋๋ ๋ n๋ฏธํฐ์ด๋ฉฐ, ์ธ๋ฒฝ์ ๋ช๋ช ์ง์ ์ ์ถ์๊ฐ ์ฌํ ๊ฒฝ์ฐ ์์๋ ์๋ ์๋ ์ทจ์ฝํ ์ง์ ๋ค์ด ์์ต๋๋ค. ๋ฐ๋ผ์ ๋ด๋ถ ๊ณต์ฌ ๋์ค์๋ ์ธ๋ฒฝ์ ์ทจ์ฝ ์ง์ ๋ค์ด ์์๋์ง ์์๋ ์ง, ์ฃผ๊ธฐ์ ์ผ๋ก ์น๊ตฌ๋ค์ ๋ณด๋ด์ ์ ๊ฒ์ ํ๊ธฐ๋ก ํ์ต๋๋ค. ๋ค๋ง, ๋น ๋ฅธ ๊ณต์ฌ ์งํ์ ์ํด ์ ๊ฒ ์๊ฐ์ 1์๊ฐ์ผ๋ก ์ ํํ์ต๋๋ค. ์น๊ตฌ๋ค์ด 1์๊ฐ ๋์ ์ด๋ํ ์ ์๋ ๊ฑฐ๋ฆฌ๋ ์ ๊ฐ๊ฐ์ด๊ธฐ ๋๋ฌธ์, ์ต์ํ์ ์น๊ตฌ๋ค์ ํฌ์
ํด ์ทจ์ฝ ์ง์ ์ ์ ๊ฒํ๊ณ ๋๋จธ์ง ์น๊ตฌ๋ค์ ๋ด๋ถ ๊ณต์ฌ๋ฅผ ๋๋๋ก ํ๋ ค๊ณ ํฉ๋๋ค. ํธ์ ์ ๋ ์คํ ๋์ ์ ๋ถ ๋ฐฉํฅ ์ง์ ์ 0์ผ๋ก ๋ํ๋ด๋ฉฐ, ์ทจ์ฝ ์ง์ ์ ์์น๋ ์ ๋ถ ๋ฐฉํฅ ์ง์ ์ผ๋ก๋ถํฐ ์๊ณ ๋ฐฉํฅ์ผ๋ก ๋จ์ด์ง ๊ฑฐ๋ฆฌ๋ก ๋ํ๋
๋๋ค. ๋, ์น๊ตฌ๋ค์ ์ถ๋ฐ ์ง์ ๋ถํฐ ์๊ณ, ํน์ ๋ฐ์๊ณ ๋ฐฉํฅ์ผ๋ก ์ธ๋ฒฝ์ ๋ฐ๋ผ์๋ง ์ด๋ํฉ๋๋ค.
์ธ๋ฒฝ์ ๊ธธ์ด n, ์ทจ์ฝ ์ง์ ์ ์์น๊ฐ ๋ด๊ธด ๋ฐฐ์ด weak, ๊ฐ ์น๊ตฌ๊ฐ 1์๊ฐ ๋์ ์ด๋ํ ์ ์๋ ๊ฑฐ๋ฆฌ๊ฐ ๋ด๊ธด ๋ฐฐ์ด dist๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ์ทจ์ฝ ์ง์ ์ ์ ๊ฒํ๊ธฐ ์ํด ๋ณด๋ด์ผ ํ๋ ์น๊ตฌ ์์ ์ต์๊ฐ์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ์ฌํญ
- n์ 1 ์ด์ 200 ์ดํ์ธ ์์ฐ์์ ๋๋ค.
- weak์ ๊ธธ์ด๋ 1 ์ด์ 15 ์ดํ์
๋๋ค.
- ์๋ก ๋ค๋ฅธ ๋ ์ทจ์ฝ์ ์ ์์น๊ฐ ๊ฐ์ ๊ฒฝ์ฐ๋ ์ฃผ์ด์ง์ง ์์ต๋๋ค.
- ์ทจ์ฝ ์ง์ ์ ์์น๋ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ๋์ด ์ฃผ์ด์ง๋๋ค.
- weak์ ์์๋ 0 ์ด์ n - 1 ์ดํ์ธ ์ ์์ ๋๋ค.
- dist์ ๊ธธ์ด๋ 1 ์ด์ 8 ์ดํ์
๋๋ค.
- dist์ ์์๋ 1 ์ด์ 100 ์ดํ์ธ ์์ฐ์์ ๋๋ค.
- ์น๊ตฌ๋ค์ ๋ชจ๋ ํฌ์ ํด๋ ์ทจ์ฝ ์ง์ ์ ์ ๋ถ ์ ๊ฒํ ์ ์๋ ๊ฒฝ์ฐ์๋ -1์ return ํด์ฃผ์ธ์.
์ ์ถ๋ ฅ ์
12 | [1, 5, 6, 10] | [1, 2, 3, 4] | 2 |
12 | [1, 3, 4, 9, 10] | [3, 5, 7] | 1 |
โ๏ธ ํ์ด
๋ฌธ์ ์ ๋ํ ์ ๊ทผ์ด ๊ฝค ์ด๋ ค์ ๋ค. ๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ๊ณ์ฐํ๋ฉด ์๊ฐ์ด๊ณผ๊ฐ ๋ ๊ฒ ๊ฐ์์ ๊ณ ๋ฏผ์ ๋ง์ด ํ๋๋ฐ ์ฐ์ ์๋ํด๋ณด๊ธฐ๋ก ํ๋ค.
์ธ๋ฒฝ์ ๋ฅ๊ทผ ํํ๋ก ๋์ด ์์ด ๊ณ์ฐํ๊ธฐ๊ฐ ์ด๋ ค์ ๊ธฐ ๋๋ฌธ์ ํธํ๊ฒ ๊ณ์ฐํ๊ธฐ ์ํด์ ์ผ์๋ก ํด์ฃผ๋ ์์ ์ ํ๋ค. ์๊ณ๋ฅผ ์๋ก ๋ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ์์ ์ ํ๋ค. 1์ ์ง์ ์ ์ธ๋ฑ์ค 0, 12์๊ฐ ์ธ๋ฑ์ค 11์ด๋ผ๊ณ ๊ฐ์ ํ์ ๋ ์ผ์๋ก ํด์ ๋์ดํ๋ค๋ฉด [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]๊ฐ ๋๋ค. ํ์ง๋ง ๋ฌธ์ ๋ ๋ฅ๊ทผ ํํ์ด๊ธฐ ๋๋ฌธ์ 1์ ์์น(์ธ๋ฑ์ค 0)์์ 12์ ์์น(์ธ๋ฑ์ค 11)์ผ๋ก๋ ์ ๊ทผ์ด ๊ฐ๋ฅํด์ผ ํ๋ค. ๊ทธ๋์ ๋ฐฐ์ด์ [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11] ์ด๋ฐ์์ผ๋ก ์ถ๊ฐ์ ์ธ ์์๋ฅผ ๋ฃ์ด์คฌ๋ค. ํ์ง๋ง ๊ณ์ฐํ ๋๋ฅผ ์๊ฐํด๋ณธ๋ค๋ฉด 12์ ์์น์์ 1์ ์์น๋ก ์ด๋ํ ๋ 12 - 1 ๋๋ 1 - 12๋ฅผ ํ๋๋ผ๋ 1์ด๋ผ๋ ์ซ์๊ฐ ๋์ค์ง ์๋๋ค. ๋ฐ๋ผ์ ๋๋(n)๋งํผ ๋ํด์ ๋ฃ์ด [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]์ ๋ฐฐ์ด๋ก ๋ณํ์์ผ์คฌ๋ค.
์ทจ์ฝ์ ์ ์ด๋ํ ๋ ํ๋ช ์ ์น๊ตฌ๊ฐ ๊ฐ ์ ์๋ ๊ฑฐ๋ฆฌ๋ ๊ณ ๋ คํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์์๊ฐ ์ค์ํ๋ค. ๋ฐ๋ผ์ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ๊ธฐ ์ํด combiDist ๋ผ๋ ํจ์๋ฅผ ๋ง๋ค์๋ค. ์ด ํจ์๋ ๊ฒฐ๊ณผ ๋ฐฐ์ด(dists), ๋ฝ์ ์น๊ตฌ(cnt), ํ์ฌ์ ์กฐํฉ์ ๊ฐ์ง๋ ๋ฐฐ์ด(arr), ๋ฝ์ ์น๊ตฌ๋ฅผ ํ์ธํ๊ธฐ ์ํ ๋ฐฐ์ด(check) ์ด ๋ค๊ฐ์ ์ธ์๋ฅผ ๋ฐ์ ์ด์ฐจ์ ๋ฐฐ์ด์ผ๋ก ์น๊ตฌ๋ค์ ์์ ์กฐํฉ์ ๋ฐํํ๋ค.
์ด์ ๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ํ์ํ ํ ๋ฐ ์์์์น์ ๋ฐ๋ผ์๋ ๊ฒฐ๊ณผ๊ฐ ๋ณํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ฐ๋ณต๋ฌธ์ผ๋ก 0๋ถํฐ ์ทจ์ฝ์ ์ ๊ธธ์ด๋งํผ ๋ฐ๋ณตํ๋๋ก ํ๋ค. ์์์ ์์๋ค์๋ ์๊ณ๋ฅผ ๊ธฐ์ค์ผ๋ก ํ๋ค๋ฉด 1์๋ถํฐ 12์ ์์น๊น์ง ํ์ํ๋ค.
๋ ๋ฒ์งธ ๋ฐ๋ณต๋ฌธ์ผ๋ก ๋ช ๋ช ์ ์น๊ตฌ๋ค์ ์กฐํฉํ ์ง ๊ณ์ฐํ๊ธฐ ์ํด cnt๋ผ๋ ๋ณ์๋ฅผ ๊ฐ์ง๊ณ ๋ฐ๋ชฉ๋ฌธ์ ๋๋ ค์คฌ๋ค. ์ด๋ ์ต์ ํ๋ช ์ ์น๊ตฌ๋ ํ์ํ๊ธฐ ๋๋ฌธ์ 1๋ถํฐ ์น๊ตฌ๋ค์ ์๊น์ง ๋ฐ๋ณตํ๋ค. ์ด ๋ฐ๋ณต๋ฌธ ๋ด๋ถ์์ ์น๊ตฌ๋ค์ ์์ ์กฐํฉ(dists)์ ๊ตฌํ๊ณ ์ํํ๋ฉฐ ํ์ธํ๋ค.
ํ์ธํ ๋๋ ํ์ฌ ์ทจ์ฝ ์ง์ ์์ ์๋์ ์ทจ์ฝ์ ๊ฐ์๋ฅผ ๋ํ ์ง์ ๊น์ง๋ฅผ ์ํํ๋ค. ๋ง์ฝ ์ทจ์ฝ์ ์ ๋ค ๋์ง ๋ชปํ์ง๋ง ๋จ์ ์น๊ตฌ๊ฐ ์๋ ๊ฒฝ์ฐ ๋ฐ๋ณต๋ฌธ ์ข ๋ฃํ๋ค. ๋ค ๋ ์ ์๋์ง๋ฅผ ํ์ธํ๊ธฐ ์ํ ์กฐ๊ฑด๋ฌธ์ด ์๋๋ฐ ์ด๋ ํ์ฌ ๋๊ณ ์๋ ์น๊ตฌ๊ฐ ํ์ฌ ์ทจ์ฝ ์ง์ ์์ ๋ค์ ์ทจ์ฝ ์ง์ ์ผ๋ก ๊ฐ ์ ์๋์ง๋ฅผ ํ์ธํ๊ณ ๊ฐ ์ ์๋ค๋ฉด ์น๊ตฌ๊ฐ ๊ฐ ์ ์๋ ๋จ์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ฐฑ์ (์ทจ์ฝ ์ง์ ์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ฅผ ๋นผ์ค)ํ๊ณ , ๊ฐ ์ ์๋ค๋ฉด ํ์ฌ ๋ฐฐ์ด์์ popํด์ฃผ๋ฉฐ ์ ๊ฑฐํ๋ค. ์ทจ์ฝ์ ์ ๋ชจ๋ ์ํํ์์๋ ๋จ์ ์น๊ตฌ๊ฐ ์กด์ฌํ๊ฑฐ๋, ํ์ฌ ๊ฐ ์ ์๋ ์น๊ตฌ๊ฐ ์๋ ๊ฒฝ์ฐ, ๋๋ ๋ชจ๋ ์ทจ์ฝ์ ์ ๋๊ณ ๋ง์ง๋ง ์ทจ์ฝ์ ์์ ๋์จ ๊ฒฝ์ฐ(๊ฐ ์ ์๋ ๊ฑฐ๋ฆฌ๊ฐ 0์ด ๋ ๊ฒฝ์ฐ) answer๋ฅผ Math.min์ ์ฌ์ฉํ์ฌ ๊ฐฑ์ ํด์ค๋ค.
๋ง์ง๋ง์ ์ทจ์ฝ์ง์ ๋ณด๋ค answer๊ฐ ํฐ ๊ฒฝ์ฐ(์ฒ์์ answer๋ฅผ Infinity๋ก ์ด๊ธฐํํ์) ์ทจ์ฝ์ ์ ๋ ์ ์๋ค๋ ์๋ฏธ์ด๊ธฐ ๋๋ฌธ์ -1์ ๋ฐํํ๋ค.
๋ฌธ์ ๋ ํด๊ฒฐํ์ง๋ง ์๊ฐ์ด ๊ฝค ์ค๋ ๊ฑธ๋ฆฌ๋ ๊ฒ ๊ฐ์์ ์๊ฐ์ ์ค์ผ ๋ฐฉ๋ฒ์ ์๊ฐํ๋ค. ๊ทธ ์ค ํ๋๊ฐ cnt๋ฅผ ๋ค๋ฃจ๋ ๋ฐ๋ณต๋ฌธ(2๋ฒ์งธ for๋ฌธ)์์ ๋ง์ฝ ํ์ฌ์ answer๋ณด๋ค cnt๊ฐ ๊ฐ๊ฑฐ๋ ํฌ๋ค๋ฉด ํ์ธํ ์๋ฏธ๊ฐ ์์ผ๋ฏ๋ก breakํ๋ ์กฐ๊ฑด๋ฌธ์ ํ๋ ์ถ๊ฐํ๋ค. 1000ms๋ฅผ ๋๊ธฐ๋ ์ผ์ด์ค๋ ์ฌ๋ฟ ์กด์ฌํ๋๋ฐ ๋ชจ๋ 1000ms ์ดํ๋ก ๋จ์ด์ง๋ ํจ๊ณผ๋ฅผ ๋ณผ ์ ์์๋ค. ์ถ๊ฐ๋ก ๊ฐ cnt๋ง๋ค ์น๊ตฌ ์์ ์กฐํฉ์ ๊ณ์ ๊ตฌํ ํ์๊ฐ ์์ผ๋ฏ๋ก cacheํ๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ค๊ณ ํ๋๋ฐ ์ด ์กฐํฉ์์ popํ๊ฑฐ๋ ์๋ฅผ ๋นผ๊ณ ๋ํ๋ ๋ฑ ์กฐ์ํ๊ธฐ ๋๋ฌธ์ ๊น์๋ณต์ฌ๊ฐ ํ์ํ๊ณ ์คํ๋ ค ๋ ๋ง์ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ ๊ฒ ๊ฐ์ ๊ฑด๋๋ฆฌ์ง ์์๋ค. ์ด ๋ถ๋ถ๋ ํด๊ฒฐํ๋ฉด ๋ ํจ์จ์ฑ์๋ ์ฝ๋๊ฐ ๋ ๊ฒ ๊ฐ๋ค!
โจ๏ธ ์ฝ๋
function solution(n, weak, dist) {
var answer = Infinity;
const weakLen = weak.length;
const distLen = dist.length;
for (let i = 0; i < weakLen; i++) weak.push(weak[i] + n);
const combiDist = (dists, cnt, arr, check) => {
if (cnt === arr.length) dists.push(arr);
else {
for (let i = 0; i < distLen; i++) {
if (check[i]) continue;
check[i] = 1;
combiDist(dists, cnt, [...arr, dist[i]], [...check]);
check[i] = 0;
}
}
return dists;
};
for (let i = 0; i < weakLen; i++) {
for (let cnt = 1; cnt < distLen + 1; cnt++) {
if (answer <= cnt) break;
const check = new Array(distLen).fill(0);
const dists = combiDist([], cnt, [], check);
for (const d of dists) {
for (let k = i; k < i + weakLen - 1; k++) {
if (!d.length) break;
if (d[d.length - 1] >= weak[k + 1] - weak[k]) d[d.length - 1] -= weak[k + 1] - weak[k];
else d.pop();
}
if (d.length) {
answer = Math.min(answer, cnt);
break;
}
}
}
}
return answer > distLen ? -1 : answer;
}
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Algorithm] ์ฐ์ ํ์ค ๋ถ๋ถ ์์ด์ ํฉ (0) | 2023.03.19 |
---|---|
[Algorithm] ๊ฑฐ์ค๋ฆ๋ (0) | 2023.03.18 |
[Algorithm] ํ ์ด๋ธ ํด์ ํจ์ (1) | 2023.03.17 |
[Algorithm]์ซ์ ์นด๋ ๋๋๊ธฐ (0) | 2023.03.16 |
[Algorithm] ๋ง์น ํ๊ธฐ (0) | 2023.03.15 |