kohigowild
221025 [ํ๋ก๊ทธ๋๋จธ์ค] :: ํฐ์ผ๋ชฌ, ์ฐ์ ๋ถ๋ถ ์์ด ํฉ์ ๊ฐ์, ํผ๋ก๋ ๋ณธ๋ฌธ
Algorithm
221025 [ํ๋ก๊ทธ๋๋จธ์ค] :: ํฐ์ผ๋ชฌ, ์ฐ์ ๋ถ๋ถ ์์ด ํฉ์ ๊ฐ์, ํผ๋ก๋
kohi โ 2022. 10. 26. 00:27ํฐ์ผ๋ชฌ
๐พ ๋ฌธ์ ์ค๋ช
๋น์ ์ ํฐ์ผ๋ชฌ์ ์ก๊ธฐ ์ํ ์ค๋ ์ฌํ ๋์, ํ ๋ฐ์ฌ๋์ ์ฐ๊ตฌ์ค์ ๋์ฐฉํ์ต๋๋ค. ํ ๋ฐ์ฌ๋์ ๋น์ ์๊ฒ ์์ ์ ์ฐ๊ตฌ์ค์ ์๋ ์ด N ๋ง๋ฆฌ์ ํฐ์ผ๋ชฌ ์ค์์ N/2๋ง๋ฆฌ๋ฅผ ๊ฐ์ ธ๊ฐ๋ ์ข๋ค๊ณ ํ์ต๋๋ค.ํ ๋ฐ์ฌ๋ ์ฐ๊ตฌ์ค์ ํฐ์ผ๋ชฌ์ ์ข ๋ฅ์ ๋ฐ๋ผ ๋ฒํธ๋ฅผ ๋ถ์ฌ ๊ตฌ๋ถํฉ๋๋ค. ๋ฐ๋ผ์ ๊ฐ์ ์ข ๋ฅ์ ํฐ์ผ๋ชฌ์ ๊ฐ์ ๋ฒํธ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ฐ๊ตฌ์ค์ ์ด 4๋ง๋ฆฌ์ ํฐ์ผ๋ชฌ์ด ์๊ณ , ๊ฐ ํฐ์ผ๋ชฌ์ ์ข ๋ฅ ๋ฒํธ๊ฐ [3๋ฒ, 1๋ฒ, 2๋ฒ, 3๋ฒ]์ด๋ผ๋ฉด ์ด๋ 3๋ฒ ํฐ์ผ๋ชฌ ๋ ๋ง๋ฆฌ, 1๋ฒ ํฐ์ผ๋ชฌ ํ ๋ง๋ฆฌ, 2๋ฒ ํฐ์ผ๋ชฌ ํ ๋ง๋ฆฌ๊ฐ ์์์ ๋ํ๋ ๋๋ค. ์ด๋, 4๋ง๋ฆฌ์ ํฐ์ผ๋ชฌ ์ค 2๋ง๋ฆฌ๋ฅผ ๊ณ ๋ฅด๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ด 6๊ฐ์ง๊ฐ ์์ต๋๋ค.
์ด๋, ์ฒซ ๋ฒ์งธ(3๋ฒ) ํฐ์ผ๋ชฌ๊ณผ ๋ค ๋ฒ์งธ(3๋ฒ) ํฐ์ผ๋ชฌ์ ์ ํํ๋ ๋ฐฉ๋ฒ์ ํ ์ข ๋ฅ(3๋ฒ ํฐ์ผ๋ชฌ ๋ ๋ง๋ฆฌ)์ ํฐ์ผ๋ชฌ๋ง ๊ฐ์ง ์ ์์ง๋ง, ๋ค๋ฅธ ๋ฐฉ๋ฒ๋ค์ ๋ชจ๋ ๋ ์ข ๋ฅ์ ํฐ์ผ๋ชฌ์ ๊ฐ์ง ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ ์์์์ ๊ฐ์ง ์ ์๋ ํฐ์ผ๋ชฌ ์ข ๋ฅ ์์ ์ต๋๊ฐ์ 2๊ฐ ๋ฉ๋๋ค.๋น์ ์ ์ต๋ํ ๋ค์ํ ์ข ๋ฅ์ ํฐ์ผ๋ชฌ์ ๊ฐ์ง๊ธธ ์ํ๊ธฐ ๋๋ฌธ์, ์ต๋ํ ๋ง์ ์ข ๋ฅ์ ํฐ์ผ๋ชฌ์ ํฌํจํด์ N/2๋ง๋ฆฌ๋ฅผ ์ ํํ๋ ค ํฉ๋๋ค. N๋ง๋ฆฌ ํฐ์ผ๋ชฌ์ ์ข ๋ฅ ๋ฒํธ๊ฐ ๋ด๊ธด ๋ฐฐ์ด nums๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, N/2๋ง๋ฆฌ์ ํฐ์ผ๋ชฌ์ ์ ํํ๋ ๋ฐฉ๋ฒ ์ค, ๊ฐ์ฅ ๋ง์ ์ข ๋ฅ์ ํฐ์ผ๋ชฌ์ ์ ํํ๋ ๋ฐฉ๋ฒ์ ์ฐพ์, ๊ทธ๋์ ํฐ์ผ๋ชฌ ์ข ๋ฅ ๋ฒํธ์ ๊ฐ์๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
- ์ฒซ ๋ฒ์งธ(3๋ฒ), ๋ ๋ฒ์งธ(1๋ฒ) ํฐ์ผ๋ชฌ์ ์ ํ
- ์ฒซ ๋ฒ์งธ(3๋ฒ), ์ธ ๋ฒ์งธ(2๋ฒ) ํฐ์ผ๋ชฌ์ ์ ํ
- ์ฒซ ๋ฒ์งธ(3๋ฒ), ๋ค ๋ฒ์งธ(3๋ฒ) ํฐ์ผ๋ชฌ์ ์ ํ
- ๋ ๋ฒ์งธ(1๋ฒ), ์ธ ๋ฒ์งธ(2๋ฒ) ํฐ์ผ๋ชฌ์ ์ ํ
- ๋ ๋ฒ์งธ(1๋ฒ), ๋ค ๋ฒ์งธ(3๋ฒ) ํฐ์ผ๋ชฌ์ ์ ํ
- ์ธ ๋ฒ์งธ(2๋ฒ), ๋ค ๋ฒ์งธ(3๋ฒ) ํฐ์ผ๋ชฌ์ ์ ํ
๐พ ์ ํ ์ฌํญ
- nums๋ ํฐ์ผ๋ชฌ์ ์ข ๋ฅ ๋ฒํธ๊ฐ ๋ด๊ธด 1์ฐจ์ ๋ฐฐ์ด์ ๋๋ค.
- nums์ ๊ธธ์ด(N)๋ 1 ์ด์ 10,000 ์ดํ์ ์์ฐ์์ด๋ฉฐ, ํญ์ ์ง์๋ก ์ฃผ์ด์ง๋๋ค.
- ํฐ์ผ๋ชฌ์ ์ข ๋ฅ ๋ฒํธ๋ 1 ์ด์ 200,000 ์ดํ์ ์์ฐ์๋ก ๋ํ๋ ๋๋ค.
- ๊ฐ์ฅ ๋ง์ ์ข ๋ฅ์ ํฐ์ผ๋ชฌ์ ์ ํํ๋ ๋ฐฉ๋ฒ์ด ์ฌ๋ฌ ๊ฐ์ง์ธ ๊ฒฝ์ฐ์๋, ์ ํํ ์ ์๋ ํฐ์ผ๋ชฌ ์ข ๋ฅ ๊ฐ์์ ์ต๋๊ฐ ํ๋๋ง return ํ๋ฉด ๋ฉ๋๋ค.
๐พ ๋์ ๋ต์
function solution(nums) {
const set = Array.from(new Set(nums));
return set.length < nums.length / 2 ? set.length : nums.length / 2;
}
- set์ผ๋ก ์ค๋ณต ์ ๊ฑฐ
- nums์ ๊ธธ์ด๋ฅผ 2๋ก ๋๋ ๊ฐ์ด set์ ๊ธธ์ด๋ณด๋ค ํฌ๋ฉด set์ ๊ธธ์ด ๋ฐํ, ๊ทธ๋ ์ง ์์ผ๋ฉด nums.length / 2 ๋ฐํ
์ฐ์ ๋ถ๋ถ ์์ด ํฉ์ ๊ฐ์
๐พ ๋ฌธ์ ์ค๋ช
์ฒ ํธ๋ ์์ด์ ๊ฐ์ง๊ณ ๋๊ธฐ ์ข์ํฉ๋๋ค. ์ด๋ ๋ ์ฒ ํธ๋ ์ด๋ค ์์ฐ์๋ก ์ด๋ฃจ์ด์ง ์ํ ์์ด์ ์ฐ์ํ๋ ๋ถ๋ถ ์์ด์ ํฉ์ผ๋ก ๋ง๋ค ์ ์๋ ์๊ฐ ๋ชจ๋ ๋ช ๊ฐ์ง์ธ์ง ์์๋ณด๊ณ ์ถ์ด์ก์ต๋๋ค. ์ํ ์์ด์ด๋ ์ผ๋ฐ์ ์ธ ์์ด์์ ์ฒ์๊ณผ ๋์ด ์ฐ๊ฒฐ๋ ํํ์ ์์ด์ ๋งํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์์ด [7, 9, 1, 1, 4] ๋ก ์ํ ์์ด์ ๋ง๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ํ ์์ด์ ์ฒ์๊ณผ ๋์ด ์ฐ๊ฒฐ๋์ด ๋๊ธฐ๋ ๋ถ๋ถ์ด ์๊ธฐ ๋๋ฌธ์ ์ฐ์ํ๋ ๋ถ๋ถ ์์ด๋ ์ผ๋ฐ์ ์ธ ์์ด๋ณด๋ค ๋ง์์ง๋๋ค.
์ํ ์์ด์ ๋ชจ๋ ์์ elements๊ฐ ์์๋๋ก ์ฃผ์ด์ง ๋, ์ํ ์์ด์ ์ฐ์ ๋ถ๋ถ ์์ด ํฉ์ผ๋ก ๋ง๋ค ์ ์๋ ์์ ๊ฐ์๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
๐พ ์ ํ ์ฌํญ
- 3 ≤ elements์ ๊ธธ์ด ≤ 1,000
- 1 ≤ elements์ ์์ ≤ 1,000
๐พ ๋์ ๋ต์
function solution(elements) {
const elementsLoop = [...elements, ...elements];
const arr = [];
for (let i = 0; i < elements.length; i++) {
for (let j = 0; j < elements.length; j++) {
let k = i + j;
arr.push(elementsLoop.slice(j, k).reduce((a, c) => a + c, 0));
}
}
return Array.from(new Set(arr)).length;
}
- ์ํ ์์ด์ด๋ฏ๋ก elements๋ฅผ ๋ ๋ฒ ๋ฐ๋ณต
- ์ด์ค for๋ฌธ ์ฌ์ฉ, j๋ถํฐ k๊น์ง์ ํฉ์ ๋ฐฐ์ด arr์ pushํด ์ฃผ๊ณ set์ผ๋ก ์ค๋ณต ์ ๊ฑฐ ํ ๊ธธ์ด ๋ฐํ
- ํ๋ํ๋ ๊ฐ ๊ตฌํด์ ๋ฃ๋ ๊ฑฐ๋ผ ํจ์จ์ฑ ํ ์คํธ์์ ๋นจ๊ฐ ๋ถ ๋ฐ ์ค ์์๋๋ ์๋๋ค ๋์จ ์ง ์ผ๋ง ์ ๋ผ์ ๊ทธ๋ฐ๊ฐ ๋ด
ํผ๋ก๋
๐พ ๋ฌธ์ ์ค๋ช
XX๊ฒ์์๋ ํผ๋ก๋ ์์คํ (0 ์ด์์ ์ ์๋ก ํํํฉ๋๋ค)์ด ์์ผ๋ฉฐ, ์ผ์ ํผ๋ก๋๋ฅผ ์ฌ์ฉํด์ ๋์ ์ ํํํ ์ ์์ต๋๋ค. ์ด๋, ๊ฐ ๋์ ๋ง๋ค ํํ์ ์์ํ๊ธฐ ์ํด ํ์ํ "์ต์ ํ์ ํผ๋ก๋"์ ๋์ ํํ์ ๋ง์ณค์ ๋ ์๋ชจ๋๋ "์๋ชจ ํผ๋ก๋"๊ฐ ์์ต๋๋ค. "์ต์ ํ์ ํผ๋ก๋"๋ ํด๋น ๋์ ์ ํํํ๊ธฐ ์ํด ๊ฐ์ง๊ณ ์์ด์ผ ํ๋ ์ต์ํ์ ํผ๋ก๋๋ฅผ ๋ํ๋ด๋ฉฐ, "์๋ชจ ํผ๋ก๋"๋ ๋์ ์ ํํํ ํ ์๋ชจ๋๋ ํผ๋ก๋๋ฅผ ๋ํ๋ ๋๋ค. ์๋ฅผ ๋ค์ด "์ต์ ํ์ ํผ๋ก๋"๊ฐ 80, "์๋ชจ ํผ๋ก๋"๊ฐ 20์ธ ๋์ ์ ํํํ๊ธฐ ์ํด์๋ ์ ์ ์ ํ์ฌ ๋จ์ ํผ๋ก๋๋ 80 ์ด์ ์ด์ด์ผ ํ๋ฉฐ, ๋์ ์ ํํํ ํ์๋ ํผ๋ก๋ 20์ด ์๋ชจ๋ฉ๋๋ค.
์ด ๊ฒ์์๋ ํ๋ฃจ์ ํ ๋ฒ์ฉ ํํํ ์ ์๋ ๋์ ์ด ์ฌ๋ฌ๊ฐ ์๋๋ฐ, ํ ์ ์ ๊ฐ ์ค๋ ์ด ๋์ ๋ค์ ์ต๋ํ ๋ง์ด ํํํ๋ ค ํฉ๋๋ค. ์ ์ ์ ํ์ฌ ํผ๋ก๋ k์ ๊ฐ ๋์ ๋ณ "์ต์ ํ์ ํผ๋ก๋", "์๋ชจ ํผ๋ก๋"๊ฐ ๋ด๊ธด 2์ฐจ์ ๋ฐฐ์ด dungeons ๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ์ ์ ๊ฐ ํํํ ์ ์๋ ์ต๋ ๋์ ์๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
๐พ ์ ํ ์ฌํญ
- k๋ 1 ์ด์ 5,000 ์ดํ์ธ ์์ฐ์์ ๋๋ค.
- dungeons์ ์ธ๋ก(ํ) ๊ธธ์ด(์ฆ, ๋์ ์ ๊ฐ์)๋ 1 ์ด์ 8 ์ดํ์ ๋๋ค.
- dungeons์ ๊ฐ๋ก(์ด) ๊ธธ์ด๋ 2 ์ ๋๋ค.
- dungeons์ ๊ฐ ํ์ ๊ฐ ๋์ ์ ["์ต์ ํ์ ํผ๋ก๋", "์๋ชจ ํผ๋ก๋"] ์ ๋๋ค.
- "์ต์ ํ์ ํผ๋ก๋"๋ ํญ์ "์๋ชจ ํผ๋ก๋"๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ต๋๋ค.
- "์ต์ ํ์ ํผ๋ก๋"์ "์๋ชจ ํผ๋ก๋"๋ 1 ์ด์ 1,000 ์ดํ์ธ ์์ฐ์์ ๋๋ค.
- ์๋ก ๋ค๋ฅธ ๋์ ์ ["์ต์ ํ์ ํผ๋ก๋", "์๋ชจ ํผ๋ก๋"]๊ฐ ์๋ก ๊ฐ์ ์ ์์ต๋๋ค.
๋๊ฐ ์ ๋๋ก ํ๋ ๋ฌธ์
๐พ ๋์ ๋ต์
function solution(k, dungeons) {
const arr = [];
const checked = new Array(dungeons.length).fill(0);
function DFS(k, dungeons, checked, cnt) {
arr.push(cnt);
for (let i = 0; i < dungeons.length; i++) {
if (!checked[i] && k >= dungeons[i][0]) {
checked[i] = 1;
DFS(k - dungeons[i][1], dungeons, checked, cnt + 1);
checked[i] = 0;
}
}
}
DFS(k, dungeons, checked, 0);
return Math.max(...arr);
}
- ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ด์ arr๊ณผ ๋ฐฉ๋ฌธํ ๋์ ์ ์ฒดํฌํ checked ์ ์ธ
- ๊ฒฝ์ฐ์ ์ cnt๋ฅผ arr์ ์ ๋ถ push, ์์ง ๋ฐฉ๋ฌธํ์ง ์์ ๋์ ์ด๊ณ ํ์ฌ ํผ๋ก๋(k)๋ณด๋ค ์ต์ ํ์ ํผ๋ก๋๊ฐ ์์ผ๋ฉด ๋ฐฉ๋ฌธ ์ฒดํฌ
- ์ฌ๊ท ํจ์ ์ฌ์ฉ, ํ์ฌ ํผ๋ก๋์์ ์๋ชจ ํผ๋ก๋๋ฅผ ๋นผ๊ณ cnt ๊ฐ์ 1 ๋ํ๊ณ ๊ณ์ ๋์์ค, ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ๊ธฐ ์ํด ๋ค์ ๋ฐฉ๋ฌธํด์ผ ํ๋ฏ๋ก ๋ฐฉ๋ฌธ ์ฒดํฌ ํด์
- ๊ฒฝ์ฐ์ ์ ์ค ์ต๋๊ฐ ๋ฐํ
- ๋ฌธ์ ์์ DFS๋ผ๊ณ ์ฐ์ฌ ์์ผ๋ฉด ๋๋ ๋ชจ๋ฅด๊ฒ ์คํตํด ๋ฒ๋ฆฌ์ง๋ง... ์ ์ง ๋ DFS๋ ์ข ์นํด์ก์์ง๋