์์ ํ์, ๋ธ๋ฃจํธ ํฌ์ค(Brute Force)
Brute Force ์ง์ญํ๋ฉด ์ง์น๊ฐ์ ํ, ๋ฌด์ํ ํ์ด๋ผ๋ ๋ป์ด๋ค.
์์ ํ์์ด๋ผ๋ ์ด๋ฆ์์๋ ์ ์ ์๋ฏ์ด ํ๋๋ถํฐ ์ด๊น์ง ๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ๋ค ํ์ํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ํ์ํ๋ ๋น์ฐํ ์ ๋ต์ ์ฐพ์ ์ ์๋ค.
์์ ํ์ ์์
3์๋ฆฌ๋ก ๊ตฌ์ฑ๋ ์๋ฌผ์ ์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ฐพ๊ธฐ ์ํด
000 ~ 999๊น์ง ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์ ๋ ฅํด๋ณด๋ ๊ฒ์ ์๊ฐํ๋ฉด ์ดํดํ๊ธฐ ์ฝ๋ค.
999๊น์ง ์ ๋ ฅํ ๊ฒ์ ์๊ฐํ๋ฉด ๋ฒ์จ๋ถํฐ ๋ชธ์ด์ด ๋๋ค.
์๋? ๋๋ฝ๊ฒ ์ค๋ ๊ฑธ๋ฆฌ๊ธฐ ๋๋ฌธ์ด๋ค. (This is ๊ฒฝํ๋ด)
์ฌ๊ธฐ์ ์์ ํ์ ์๊ณ ๋ฆฌ์ฆ์ ์ฅ์ ๊ณผ ๋จ์ ์ ์ ์ ์๋ค.
์์ ํ์ ์ฅ์ & ๋จ์
์ฅ์
- ๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ๋ค ๊ณ ๋ คํ๊ธฐ ๋๋ฌธ์ ํ์คํ ์ ๋ต์ ์ฐพ์ ์ ์๋ค.
- ๋ณต์กํ ์๊ณ ๋ฆฌ์ฆ ์์ด ๋น ๋ฅด๊ฒ ๊ตฌํ์ด ๊ฐ๋ฅํ๋ค.
๋จ์
- ๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ๋ค ๊ณ ๋ คํ๊ธฐ ๋๋ฌธ์ ํจ์จ์ ์ด์ง ๋ชปํ๋ค.
- ์๊ณ ๋ฆฌ์ฆ ์คํ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฐ๋ค.
๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ํ ์ ์๋ ์ต์ ๋์ ๊ฐ์ ๊ตฌํ๊ธฐ ๋ฌธ์ ๋ฅผ ์๊ฐํด๋ณด์.
๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ์ ๊ฐ์น๊ฐ ๊ฐ์ฅ ํฐ ๋์ ๋ถํฐ ์ฑ์์ ์ฃผ๋ฉด ๋๋ค.
(์ต์ ๋์ ๊ฐ์ ์ฑ์ฐ๊ธฐ๋ ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ ์ ์๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ค)
์์ ํ์์ ๊ฑฐ์ค๋ฆ๋์ ๊ฑฐ์ฌ๋ฌ์ฃผ๊ธฐ ์ํ ๋์ ์ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ชจ๋ ๊ตฌํ ๊ฒ์ด๋ค.
๊ทธ๋ฌ๋ฉด ์๊ฐ์ด ๋ฐฐ๋ก ๋ฐฐ๋ก ๊ฑธ๋ฆฐ๋ค.
์ผ๋จธ๋ฆฌ๊ฐ ์๋๋ ์๋๋์ ์ฐจ์ด๋ก ์๊ฐํ๋ฉด ์๊ณ ๋ฆฌ์ฆ์ ์ดํด๋๊ฐ ๋ ์ฌ๋ผ๊ฐ๋ค.
ํ์ฌํผ ๋๋ณด๋จ ๋น ๋ฅด์ง๋ง ๋ค๋ฅธ ์๊ณ ๋ฆฌ์ฆ๋ค๋ณด๋จ ๋๋ฆฌ๋ค.
์ํฉ์ ๋ง๋ ์๊ณ ๋ฆฌ์ฆ์ด ์๋ ๊ฒ์ด๋ค.
์์ ํ์ ์ข ๋ฅ
1. ๋ธ๋ฃจํธ ํฌ์ค(Brute Force)
์กฐ๊ฑด๋ฌธ์ ์ด์ฉํด ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์ฐพ๋ ๋ฐฉ๋ฒ์ด๋ค.
2. ๋นํธ๋ง์คํฌ (Bit Mask)
2์ง์์ธ ์ปดํจํฐ์ ์ฐ์ฐ์ ์ด์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ค.
3. ์์ด
์์ ํ์์ ๋ํ์ ์ธ ์ ํ์ด๋ค.
์์ด์ ์๋ก ๋ค๋ฅธ N๊ฐ์์ r๊ฐ๋ฅผ ๋ฝ์ ํ ์ค๋ก ์ธ์ฐ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๋งํ๋ค.
4. ๋ฐฑํธ๋ํน
ํ์ฌ ์ํ์์ ๊ฐ๋ฅํ ํ๋ณด๊ตฐ์ผ๋ก ๊ฐ์ง๋ฅผ ์น๋ฉฐ ํ์ํ๋ ๋ฐฉ๋ฒ์ด๋ค.
5. DFS/BFS
๋๋น ์ฐ์ ํ์(BFS) : ์ ์ ๊ณผ ๊ฐ์ ๋ ๋ฒจ์ ์๋ ํ์ ๋ ธ๋๋ค์ ํ์
๊น์ด ์ฐ์ ํ์(DFS) : ์ ์ ์ ์์ ๋ ธ๋๋ค์ ํ์
1๋ฒ ์ด์ธ์ ๊ฒ๋ค์ ์์ง ๊ณต๋ถ๋ฅผ ํ์ง ์์๋ค.
์ฐจ์ฐจ ์ ๋ฆฌํด ๋๊ฐ ์์ ์ด๋ค! ๐
์์ ํ์ ์์์ฝ๋ (๋ธ๋ฃจํธ ํฌ์ค)
์์๋ก ์์ 1๋ฒ์ธ ๋ธ๋ฃจํธ ํฌ์ค(Brute Force)์ ๋ํ ๋ฐฑ์ค ๋ฌธ์ ์ด๋ค.
๋ฐฑ์ค 2798๋ฒ : ๋ธ๋์ญ
ํ์ด ์ฝ๋
const fs = require('fs');
const input = fs.readFileSync('dev/stdin').toString().trim().split('\n');
let num = input.shift().split(' ').map(Number);
let n = num[0];
let m = num[1];
let nums = input[0].split(' ').map(Number);
function blackJack(n, m) {
let result = 0;
for (let i = 0; i < n - 2; i++) {
for (let j = i + 1; j < n - 1; j++) {
for (let k = j + 1; k < n; k++) {
let sum = nums[i] + nums[j] + nums[k];
if (sum > result && sum <= m) {
result = sum;
}
}
}
}
return result;
}
console.log(blackJack(n, m))
HOW? (ํ์ด๋ฐฉ๋ฒ)
๋ธ๋ฃจํธ ํฌ์ค๋ต๊ฒ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํด์ผ ํ๋ค.
๋ฐ๋ณต๋ฌธ์ ๋๋ ค์ ๋์ฌ ์ ์๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ชจ๋ ๊ณ์ฐํ๋ค.
์นด๋ 3๊ฐ์ ์กฐํฉ์ ๊ตฌํ๊ธฐ ๋๋ฌธ์ for๋ฌธ ์ค์ฒฉ์ 3๋ฒ ๋๋ฆฐ๋ค.
for์ค์ฒฉ์ 2๋ฒ๊น์ง๋ ์จ๋ดค๋๋ฐ 3๋ฒ์ด๋ ์ฐ๋ ค๋๊น ์ฒ์์๋ ์ด๊ฒ ๋ญ์ ์ถ์๋ค.
ํ์ง๋ง ์คํ๋๋ ๊ฒ๋ค์ ์ถ๋ ฅํด๋ณด๋ ์ดํด๊ฐ ๊ฐ๋ค.
์๋ฅผ ๋ค์ด 5์ข ๋ฅ์ ์นด๋ 5,6,7,8,9์ 3์ฅ์ ๋ฝ์ ๋ํ ์ต๋ํฉ์ด 21์ด๋ผ๊ณ ํ์ ๋
์์ for๋ฌธ์ ๋๋ฆฌ๋ฉด ์๋์ ๊ฐ์ด ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ํ์ธํ ์ ์๋ค.
Reference(์ฐธ์กฐ)
https://intrepidgeeks.com/tutorial/algorithm-complete-navigation-technology
https://hongjw1938.tistory.com/78
https://velog.io/@sangbooom/JS-BFS-DFS
https://saegeullee.github.io/algorithm/bfs-dfs
'Algorithms > Algorithms' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ ๊ธฐ๋ณธ] ํ์(Greedy) ์๊ณ ๋ฆฌ์ฆ (0) | 2022.05.21 |
---|---|
[์๊ณ ๋ฆฌ์ฆ ๊ธฐ๋ณธ] ํ๋ ธ์ดํ ์๊ณ ๋ฆฌ์ฆ (0) | 2022.05.18 |