๋”ฐํŒŒ๐Ÿ•
Hwaiian Pizza IT Pub
๋”ฐํŒŒ๐Ÿ•
  • ALL (62)
    • Front-End (13)
      • HTML & CSS (2)
      • JavaScript (7)
      • React (2)
      • TypeScript (0)
      • Jquery (0)
      • Git (1)
      • Editor (0)
    • Algorithms (44)
      • Baekjoon (28)
      • Programmers (13)
      • Algorithms (3)
    • Computer Science (0)
      • Math (0)
    • Conference (1)
    • Life (3)
      • Book (0)
hELLO ยท Designed By ์ •์ƒ์šฐ.
๋”ฐํŒŒ๐Ÿ•

Hwaiian Pizza IT Pub

[์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ธฐ๋ณธ] ์™„์ „ ํƒ์ƒ‰ (๋ธŒ๋ฃจํŠธ ํฌ์Šค Brute Force)
Algorithms/Algorithms

[์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ธฐ๋ณธ] ์™„์ „ ํƒ์ƒ‰ (๋ธŒ๋ฃจํŠธ ํฌ์Šค Brute Force)

2022. 5. 25. 18:51
๋ฐ˜์‘ํ˜•

 

 

์™„์ „ ํƒ์ƒ‰, ๋ธŒ๋ฃจํŠธ ํฌ์Šค(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๋ฒˆ : ๋ธ”๋ž™์žญ

 

2798๋ฒˆ: ๋ธ”๋ž™์žญ

์ฒซ์งธ ์ค„์— ์นด๋“œ์˜ ๊ฐœ์ˆ˜ N(3 ≤ N ≤ 100)๊ณผ M(10 ≤ M ≤ 300,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” ์นด๋“œ์— ์“ฐ์—ฌ ์žˆ๋Š” ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง€๋ฉฐ, ์ด ๊ฐ’์€ 100,000์„ ๋„˜์ง€ ์•Š๋Š” ์–‘์˜ ์ •์ˆ˜์ด๋‹ค. ํ•ฉ์ด M์„ ๋„˜์ง€ ์•Š๋Š” ์นด๋“œ 3์žฅ

www.acmicpc.net

 

 

ํ’€์ด ์ฝ”๋“œ

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๋ฌธ์„ ๋Œ๋ฆฌ๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 
[0] 5 + [1] 6 + [2] 7 = 18
[0] 5 + [1] 6 + [3] 8 = 19
[0] 5 + [1] 6 + [4] 9 = 20
[0] 5 + [2] 7 + [3] 8 = 20
[0] 5 + [2] 7 + [4] 9 = 21
[0] 5 + [3] 8 + [4] 9 = 22
[1] 6 + [2] 7 + [3] 8 = 21
[1] 6 + [2] 7 + [4] 9 = 22
[1] 6 + [3] 8 + [4] 9 = 23
[2] 7 + [3] 8 + [4] 9 = 24
 
 

 

 

 

 

 

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
    'Algorithms/Algorithms' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ธฐ๋ณธ] ํƒ์š•(Greedy) ์•Œ๊ณ ๋ฆฌ์ฆ˜
    • [์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ธฐ๋ณธ] ํ•˜๋…ธ์ดํƒ‘ ์•Œ๊ณ ๋ฆฌ์ฆ˜
    ๋”ฐํŒŒ๐Ÿ•
    ๋”ฐํŒŒ๐Ÿ•
    ์ €์ชฝ ์†๋‹˜์ด ๋ณด๋‚ด์‹  ์—๋Ÿฌ์ž…๋‹ˆ๋‹ค. ๋””๋ฒ„๊น… ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?๐Ÿน

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”