1. DFS/BFS
๋๋น ์ฐ์ ํ์๊ณผ ๊น์ด ์ฐ์ ํ์์ ์ด์ฉํ๋ฉด ์ด๋ฌํ ๊ฒ๋ค์ ๊ตฌํํ ์ ์์ต๋๋ค.
- ๊ทธ๋ฆผํ์ ํ์ธํธํด
- ๊ทธ๋ํ์ D์์ G๋ก ๊ฐ๋ ์ต๋จ ๊ฑฐ๋ฆฌ
cf. DFS BFS ๊น์ด ๋๋น ์ฐ์ ํ์ ์๊ณ ๋ฆฌ์ฆ 5๋ถ๋ง์ ์ดํดํ๊ธฐ
- ๋๋ผ๋ง ํ๋๋ฅผ ๋ชฐ์๋ณธ๋ค = DFS
- ๋๋ผ๋ง ์ฌ๋ฌ ๊ฐ๋ฅผ ํ๋์ฉ ๋ณธ๋ค = BFS
๊ทธ๋ํ ํ์ ์๊ณ ๋ฆฌ์ฆ = BFS, DFS
๊ทธ๋ํ: ์ฌ๋ฌ ๊ฐ์ฒด๋ค์ด ์ฐ๊ฒฐ๋์ด ์๋ ์๋ฃ๊ตฌ์กฐํ์: ํน์ ๊ฐ์ฒด๋ฅผ ์ฐพ๊ธฐ ์ํ ์๊ณ ๋ฆฌ์ฆ
1.1 ๋ํ์ ์ธ ๋ฌธ์ ์ ํ
- ๊ฒฝ๋กํ์ ์ ํ(์ต๋จ๊ฑฐ๋ฆฌ, ์๊ฐ)
- ๋คํธ์ํฌ ์ ํ(์ฐ๊ฒฐ)
- ์กฐํฉ ์ ํ(๋ชจ๋ ์กฐํฉ ๋ง๋ค๊ธฐ)
1.2 DFS ๊ตฌํ ๋ฐฉ๋ฒ
- ํ ๋๋ง ๋๊น์ง ํจ๋ ์ ํ์ด๋ผ ์ฌ๊ทํจ์๋ก ๊ตฌํํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ผ๋ฐ์
- ์ฌ๊ท๋ฅผ ํ๊ณ , ํ์ ํ์ถ ์กฐ๊ฑด์ ๋จผ์ ๋๋ฌํ๊ณ ๊ทธ ๋ค์ ํ๋ผ๋ฏธํฐ๋ฅผ ํ๋์ฉ ๋ฐ๊ฟ ๊ฐ๋ฉด์ ์ ๋ต์ ๊ตฌํ
1.3 BFS ๊ตฌํ ๋ฐฉ๋ฒ
- ์ฌ๋ฌ ๋์ ํ๋์ฉ ๋๋ฆฌ๋ฉด์ ๊ฐ๋ ์ ํ์ด๋ผ Queue, LinkedList๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ผ๋ฐ์
- ๊ตฌํ ๋ฐฉ๋ฒ
- ๊ฐ์ฅ ๋จผ์ ๋ฃ์๋ ๊ฒ์ ๊บผ๋ด์
- ์ฐ๊ฒฐ๋ ์ ์ Queue์ ๋ฃ๊ธฐ
- Queue๊ฐ ๋น ๋๊น์ง ๋ฐ๋ณต
- ์์๊ฐ ๋ณด์ฅ๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์ Queue, LinkedList๋ฅผ ์ฌ์ฉ
1.4 DFS/BFS ์ค ์ด๋ค ๊ฑธ ์จ์ผํ๋
- ๋ ๋ค ํ์์ ํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ผ ์ด๋ค ๊ฑธ ์จ๋ ์ ๋ต์ ๋์ค์ง๋ง ์์ ์๊ณ ์์ ์ต์ ์๊ณ ๋ฆฌ์ฆ์ ์ฐ๋ฉด ๋๋ค.
- DFS๋ BFS๋ณด๋ค ๋์ ๊ฒ์ฆ์ ํ๊ธฐ ์ฌ์
- DFS๋ ํ๋์ ์กฐํฉ์ ์์ฑํด์ ์ ๋ต๊ณผ ๋น๊ตํ๊ณ ๋ ๋ค๋ฅธ ์กฐํฉ์ ๋ง๋ค์ด ๋ณด๊ณ ์ ๋ต๊ณผ ๋น๊ตํ๋ ์์ผ๋ก ๋์
- BFS๋ ํ ๋ฒ์ ์ฌ๋ฌ ์กฐํฉ๋ค์ ํ์นธ ํ์นธ์ฉ ๋ง๋ค๋ค๋ณด๋ ์กฐํฉ์ ์์ฑํด
- ์ ๋ต๊ณผ ๋น๊ตํ๋ ์์ ์ ์ธ์ ์ด๋ป๊ฒ ๋ง๋ค์ด ์ก๋์ง
- ์ด๋์๋ถํฐ ํ๋ฆฐ๊ฑด์ง๋ฅผ ๋ถ์ํ๊ธฐ๊ฐ ๊น๋ค๋กญ์ต๋๋ค.
- ํ์ง๋ง BFS๋ ํ์ํ ๋๊ฐ ์๋๋ฐ,
- DFS๋ ํ ๋๋ง ํจ๋ ์๊ณ ๋ฆฌ์ฆ์ธ๋ฐ, ๊ทธ ํ ๋์ด ์ค๋ ๊ฑธ๋ฆฌ๋ฉด ์๊ฐ์ด ์ด๊ณผ๋ ์ ์์
- ํ ๋ฌธ์ ๋ฅผ ๋ ๋ฐฉ์์ผ๋ก ๋ชจ๋ ํ์ด๋ณด๋ ๊ฒ์ ์ถ์ฒ
1.5 ์ ๋ฆฌ
| DFS | BFS | |
|---|---|---|
| ์ํ์๊ฐ | ๋ณต๋ถ๋ณต | ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ํ ๊ฑธ์์ฉ ๋๊ฐ |
| ์ด์ด ์ข์ผ๋ฉด ์ฒซ๋ฒ์งธ ์กฐํฉ์ด ์ต์ ์ ๋ต์ต์ ์ ๊ฒฝ์ฐ ๋ชจ๋ ์กฐํฉ์ ๋ค ๋ง๋ค์ด์ผ ํจ | ์ด๋ฐ์ ๋๋ฆฌ๋๋ผ๋ ํ๋์ ์ ๋ต๋ง ์ฐพ์ผ๋ฉด ๋๋จธ์ง ๊ฒฝ์ฐ์ ์๋ ์ ๋ต์์ ์ ์ธ | |
| ์๊ฐ๋ณต์ก๋ | ๋๋ค | ๋ฎ๋ค |

2. BFS (๋๋น ์ฐ์ ํ์)
BFS (Breadth-First Search, ๋๋น ์ฐ์ ํ์)- ๊ทธ๋ํ ํ์ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๊ฐ์ ๊น์ด์ ํด๋นํ๋ ์ ์ ๋ถํฐ ํ์ํ๋ ์๊ณ ๋ฆฌ์ฆ
2.1 BFS ํน์ง
- Queue๋ฅผ ์ด์ฉํด์ ๊ตฌํํ ์ ์๋ค.
- ์์ ์ง์ ์์ ๊ฐ๊น์ด ์ ์ ๋ถํฐ ํ์ํ๋ค.
- V๊ฐ ์ ์ ์ ์, E๊ฐ ๊ฐ์ ์ ์์ผ ๋ BFS์ ์๊ฐ๋ณต์ก๋๋ ๋ค.

- ์์์ง์ ์ A๋ผ๊ณ ๊ฐ์ ํ๊ณ , Queue์ A๋ฅผ ์ฝ์
- A๋ก๋ถํฐ ์ด๋ํ ์ ์๋ ๊ฐ์ ์ ์ฒดํฌํ์ฌ, ํด๋น ์ ์ B, C, D๋ฅผ Queue์ ๋ฃ์ต๋๋ค.
- B ์ ์ ์ Dequeueํ์ฌ, B๋ก๋ถํฐ ์ด๋๊ฐ๋ฅํ ์ ์ F๋ฅผ Queue์ ๋ฃ์ต๋๋ค.
- ์ด๋ C๋ ์ด๋ฏธ ๋ฐฉ๋ฌธํ ๊ณณ์ด๊ธฐ ๋๋ฌธ์ ์ถ๊ฐํ์ง ์์ต๋๋ค.
- C ์ ์ ์ Dequeueํ์ฌ, C๋ก๋ถํฐ ์ด๋๊ฐ๋ฅํ ์ ์ F์ด์ง๋ง, ์ด๋ฏธ Queue์ ์๊ธฐ ๋๋ฌธ์ ์ถ๊ฐํ์ง ์์ต๋๋ค.
- D ์ ์ ์ Dequeueํ์ฌ, D๋ก๋ถํฐ ์ด๋๊ฐ๋ฅํ ์ ์ E๋ฅผ Queue์ ๋ฃ์ต๋๋ค.
- F ์ ์ ์ Dequeueํ์ฌ, F๋ก๋ถํฐ ์ด๋๊ฐ๋ฅํ ์ ์ G๋ฅผ Queue์ ๋ฃ์ต๋๋ค.
- G ์ ์ ์ ๋ ์ด์ ๊ฐ ์ ์๋ ์ ์ ์ด ์์ต๋๋ค.
- ๊ทธ๋์ G ์ ์ ์ Dequeueํ๊ณ ์ข ๋ฃํฉ๋๋ค.
3. DFS (๊น์ด ์ฐ์ ํ์)
DFS (Depth-First Search, ๊น์ด ์ฐ์ ํ์)- ๊ทธ๋ํ ํ์ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ต๋ํ ๊น์ ์ ์ ๋ถํฐ ํ์ํ๋ ์๊ณ ๋ฆฌ์ฆ
3.1 DFS ํน์ง
- Stack๋ฅผ ์ด์ฉํด์ ๊ตฌํํ ์ ์๋ค.
- ์์ ์ ์ ์์ ๊น์ ๊ฒ๋ถํฐ ์ฐพ๋๋ค.
- V๊ฐ ์ ์ ์ ์, E๊ฐ ๊ฐ์ ์ ์์ผ ๋ DFS์ ์๊ฐ๋ณต์ก๋๋ ๋ค.

์ต์์ ๋ ธํธ์์ ์ฐ๊ฒฐ๋ ์์ ๋ ธ๋๋ฅผ ๋ชจ๋ ํ์ํ ํ, ๋ ์ด์ ์์ ๋ ธ๋๊ฐ ์์ ๋ ์ธ์ ํ ์์ ๋ ธ๋์ ํ์ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธ, ํด๋น ํ์ ๋ ธ๋์์๋ ์์ ๋ ธ๋๋ฅผ ํ์ํ๊ณ , ๋ ์ด์ ์์๋ ธ๋๊ฐ ์์ ๊ฒฝ์ฐ ๋ค์ ์ธ์ ํ ์์ ํ์ ์ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธ
- ์์์ง์ ์ A๋ผ๊ณ ๊ฐ์ ํ๊ณ , Stack์ A๋ฅผ ์ฝ์
- Stack์ ํ์ธ A๋ฅผ ์ฐธ๊ณ ํ์ฌ, ์ด๋ํ ์ ์๋ ์ ์ B๋ฅผ Stack์ ๋ฃ์ต๋๋ค.
- Stack์ ํ์ธ B๋ฅผ ์ฐธ๊ณ ํ์ฌ, ์ด๋ํ ์ ์๋ ์ ์ F๋ฅผ Stack์ ๋ฃ์ต๋๋ค.
- Stack์ ํ์ธ F๋ฅผ ์ฐธ๊ณ ํ์ฌ, ์ด๋ํ ์ ์๋ ์ ์ C๋ฅผ Stack์ ๋ฃ์ต๋๋ค.
- C์์๋ ๋ ์ด์ ๊ฐ ์ ์๋ ๊ณณ์ด ์๊ธฐ ๋๋ฌธ์ pop์ ์ํํ๊ณ ,
- ๋ค์ Stack์ ํ์ธ F๋ฅผ ์ฐธ๊ณ ํ์ฌ, ์ด๋ํ ์ ์๋ ์ ์ G๋ฅผ Stack์ ๋ฃ์ต๋๋ค.
- G์์๋ ๋ ์ด์ ๊ฐ ์ ์๋ ๊ณณ์ด ์๊ธฐ ๋๋ฌธ์ pop์ ์ํํ๊ณ ,
- ๋ค์ F๋ก ๋์์๋ F์์๋ ๋ ์ด์ ๊ฐ ์ ์๋ ๊ณณ์ด ์๊ธฐ ๋๋ฌธ์ pop์ ์ํํ๊ณ ,
- ๋ค์ B๋ก ๋์์๋ B์์๋ ๋ ์ด์ ๊ฐ ์ ์๋ ๊ณณ์ด ์๊ธฐ ๋๋ฌธ์ pop์ ์ํํ๊ณ ,
- ๋ค์ A๋ก ๋์์ต๋๋ค.
- Stack์ ํ์ธ A๋ฅผ ์ฐธ๊ณ ํ์ฌ, ์ด๋ํ ์ ์๋ ์ ์ D๋ฅผ Stack์ ๋ฃ์ต๋๋ค.
- Stack์ ํ์ธ D๋ฅผ ์ฐธ๊ณ ํ์ฌ, ์ด๋ํ ์ ์๋ ์ ์ E๋ฅผ Stack์ ๋ฃ์ต๋๋ค.
- E์์ ๋ ์ด์ ๊ฐ ์ ์๋ ๊ณณ์ด ์๊ธฐ ๋๋ฌธ์ A๊น์ง ๋ค์ ๋์๊ฐ๊ณ , A์์๋ ๊ฐ ์ ์๋ ๊ณณ์ด ์๊ธฐ ๋๋ฌธ์ ์ข ๋ฃํฉ๋๋ค.
4. ๋ฌธ์ : ํ๊ฒ๋๋ฒ
์ฝ๋ฉํ ์คํธ ๊ณ ๋์ Kit : ํ๋ก๊ทธ๋๋จธ์ค Level 2 ํ๊ฒ๋๋ฒ
๊ฒฝ์ฐ์ ์ ๊ณ์ฐ: ์ต์ ์ ๊ฒฝ์ฐ ์ํํ ์ฐ์ฐ ํ์๋ฅผ ๊ณ์ฐํด ์ฌ๊ทํจ์/์์ ํ์์ ์ฌ์ฉํ ์ง ํ์ธ์ํ๋์: ์ฌ๊ทํจ์๊ฐ ํธ์ถ๋์ ๋ 1ํด๋ง๋ค ์ํํ ๋์ ๊ตฌํํ์ถ์กฐ๊ฑด: ์ด๋ ์์ ์ ์ด ์ฌ๊ทํจ์๋ฅผ ๋์์ง ๊ตฌํ
numbers์ 0๋ฒ์งธ ๋ถํฐ ๋ง์ง๋ง๊น์ง ๋ชจ๋ ์์๋ฅผ ๊ฐ๊ฐ ๋ง์ ๋๋ ๋บ์ ํ ๊ฒฐ๊ณผ๋ฅผ ๋ชจ๋ ํ์ธํ์ฌ target๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์ ๊ฐ์๋ฅผ ์ธ๊ธฐ
1/** https://school.programmers.co.kr/learn/courses/30/lessons/43165?language=javascript2* numbers ๋ฐฐ์ด์ ๊ฐ๊ฐ ๋ํ๊ฑฐ๋ ๋นผ์ ๋ชฉํํ๋ target ์ซ์ ๋ง๋๋ ๋ชจ๋ ๊ฒฝ์ฐ์ ์ ๊ตฌํ๊ธฐ3* @param {*} numbers ์ฌ์ฉํ ์ ์๋ ์ซ์4* @param {*} target ํ๊ฒ ๋๋ฒ5* @returns target ์ซ์ ๋ง๋๋ ๋ชจ๋ ๊ฒฝ์ฐ์ ์6* numbers์ ๊ฐ ์๋ฆฌ์ ์ซ์๋ฅผ ๋ํ๊ฑฐ๋ ๋นผ๋ ๊ฒฝ์ฐ๊ฐ 27* ์ฃผ์ด์ง๋ ์ซ์ ์ต๋ ๊ฐ์๊ฐ 20๊ฐ8* ๊ทธ 20๊ฐ์ ์ซ์์ ๋ํด ๊ฐ๊ฐ 2๊ฐ์ง ๊ฒฝ์ฐ์ ์๊ฐ ์กด์ฌ9* 2์ 20์น์ธ 100๋ง๋ฒ ์ ๋๊ฐ ์ต์ ์ ๊ฒฝ์ฐ์ ์10*/11function solution(numbers, target) {12let answer = 013const length = numbers.length1415DFS(0, 0) //ํจ์ ํธ์ถ (0๋ฒ์งธ ์ซ์, ํ์ฌ๊น์ง ํฉ๊ณ 0)16return answer1718// numbers์ ์ธ๋ฑ์ค์ ํ์ฌ๊น์ง์ ํฉ๊ณ19function DFS(index, sum) {20// **** 1. ํ์ถ ์กฐ๊ฑด21// numbers์ ์ธ๋ฑ์ค๋ฅผ ๋ชจ๋ ํ์ํ๋ค๋ฉด22if (index === length) {23// ํ์ฌ๊น์ง์ ํฉ๊ณ๊ฐ target์ด๋ฉด answer++24if (target === sum) {25answer++26}27return28}2930// **** 2. ์ํ๋์31// ๋ชจ๋ ์ซ์๊ฐ (+)์ธ ๊ฒฝ์ฐ๋ฅผ ๋ชจ๋ ํ์ํ ๋ค32// ๋ค์ ์ธ๋ฑ์ค์ ์ซ์๊ฐ (-)์ธ ๊ฒฝ์ฐ๋ฅผ ํ์33DFS(index + 1, sum + numbers[index])34DFS(index + 1, sum - numbers[index])35}36}
4.1 ์ํ๋์
numbers๋ [1,1,1,1,1]์ด, target์ด 3์ธ ๊ฒฝ์ฐ

(1) DFS(index + 1, sum + numbers[index]) ๋ถ๋ถ์ด ๊ณ์ ์คํ๋๋ฉฐ ๋ค์ ์ธ๋ฑ์ค์ ์ซ์๊ฐ (+) ์ธ ์์ ๋
ธ๋๋ฅผ ๊ณ์ ํ์

(2) ๋ง์ง๋ง ์ธ๋ฑ์ค์ ๋ค๋ค๋์ ๊ฒฝ์ฐ(index = 5, sum = 5 ์ผ ๋) ํด๋น ํจ์๋ฅผ ์คํ์์ ์ ๊ฑฐํ ๋ค,
index๊ฐ 4์ผ ๋ DFS(index + 1, sum - numbers[index]) ์ ์คํํ์ฌ (-)์ธ ์์ ๋
ธ๋๋ฅผ ํ์

(3) ๋ง์ง๋ง ์ธ๋ฑ์ค์ ๋ค๋ค๋์ผ๋ ๋ค์ ํด๋น ํจ์๋ฅผ ์คํ์์ ์ ๊ฑฐ,
index๊ฐ 3์ผ ๋ DFS(index + 1, sum โ numbers[index]) ์ ์คํ

(4) index 4๊ฐ (-)์ผ ๋ DFS(index + 1, sum + numbers[index])์ ์คํํ์ฌ index 5๊ฐ (+)์ธ ๊ฒฝ์ฐ์ ์์์ ํ์,
ํ์์ ๋ง์น๋ฉด ํด๋น ํจ์๋ฅผ ์คํ์์ ์ ๊ฑฐํ ๋ค
DFS(index + 1, sum - numbers[index])์ ์คํํ์ฌ index 5๊ฐ (-)์ธ ๊ฒฝ์ฐ์ ์์์ ํ์
(5) ๋ค์ index๊ฐ 2์ผ ๋ DFS(index + 1, sum + numbers[index])์ ์คํ,
index 3์ด (-)์ผ ๋ DFS(index + 1, sum + numbers[index])์ ์คํํ์ฌ index 4๊ฐ (+)์ธ ๊ฒฝ์ฐ์ ์์ ๋
ธ๋๋ฅผ ๋ชจ๋ ํ์ ํ
15๋ฒ ๋ผ์ธ์ ์คํํ๋ฉฐ index 5๊ฐ (-)์ธ ๊ฒฝ์ฐ์ ์์ ๋
ธ๋๋ฅผ ํ์
(+)์ ์์ ๋ ธ๋ ํ์ โ (-)์ ์์ ๋ ธ๋ ํ์ ์์๋ก ์ ๊ณผ์ ์ด ์งํ๋๋ฉฐ, index 1์ด (-)์ผ ๋์ ์์ ๋ ธ๋์ ๊ฒฝ์ฐ์ ์ (+), (-) ๋ฅผ ๋ชจ๋ ํ์ํ๋ฉด ํด๋น ํจ์๊ฐ ์ข ๋ฃ
4.2 ํ์ด ๋ฆฌํฉํ ๋ง
1/** https://school.programmers.co.kr/learn/courses/30/lessons/43165?language=javascript2* numbers ๋ฐฐ์ด์ ๊ฐ๊ฐ ๋ํ๊ฑฐ๋ ๋นผ์ ๋ชฉํํ๋ target ์ซ์ ๋ง๋๋ ๋ชจ๋ ๊ฒฝ์ฐ์ ์ ๊ตฌํ๊ธฐ3* @param {*} numbers ์ฌ์ฉํ ์ ์๋ ์ซ์4* @param {*} target ํ๊ฒ ๋๋ฒ5* @returns6* numbers์ ๊ฐ ์๋ฆฌ์ ์ซ์๋ฅผ ๋ํ๊ฑฐ๋ ๋นผ๋ ๊ฒฝ์ฐ๊ฐ 27* ์ฃผ์ด์ง๋ ์ซ์ ์ต๋ ๊ฐ์๊ฐ 20๊ฐ8* ๊ทธ 20๊ฐ์ ์ซ์์ ๋ํด ๊ฐ๊ฐ 2๊ฐ์ง ๊ฒฝ์ฐ์ ์๊ฐ ์กด์ฌ9* 2์ 20์น์ธ 100๋ง๋ฒ ์ ๋๊ฐ ์ต์ ์ ๊ฒฝ์ฐ์ ์10*/11function solution(numbers, target) {12function DFS(index, sum) {13if (index === numbers.length) return sum === target ? 1 : 014return DFS(index + 1, sum + numbers[index]) + DFS(index + 1, sum - numbers[index])15}16return DFS(0, 0)17}
5. ๋ฌธ์ : ๊ฒ์ ๋งต ์ต๋จ๊ฑฐ๋ฆฌ
์ฝ๋ฉํ ์คํธ ๊ณ ๋์ Kit : ํ๋ก๊ทธ๋๋จธ์ค Level 2 ๊ฒ์ ๋งต ์ต๋จ๊ฑฐ๋ฆฌ
- ๊ฒ์ ๋งต์์ ์ฐ์ธก ํ๋จ์ ์๋๋ฐฉ ์ง์์ ์์น๋ฅผ ํ์ธํ๋ค.
- ๊ฒ์ ์บ๋ฆญํฐ๊ฐ ์ด๋ํ ์ ์๋ ๋ฐฉํฅ์ฑ์ ์์นํํ๋ค.
- ๋๋น ์ฐ์ ํ์(BFS)์ ๊ตฌํํ๊ธฐ ์ํ์ฌ ํ์ฌ ํ์ธํ ์์น๋ฅผ ๋ด์ Queue๋ฅผ ์์ฑํ๋ค.
- ๊ฒ์ ์บ๋ฆญํฐ๊ฐ ์ต์ด ์์นํ๊ณ ์๋ ์ง์ ์ Queue์ ์ ๋ ฅํ๋ค.
- BFS๋ฅผ ํตํด ์์์ง์ ์์๋ถํฐ ์๋๋ฐฉ ์ง์๊น์ง์ ์ต๋จ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ค.
- ์ต๋จ๊ฑฐ๋ฆฌ ๊ตฌํ๊ธฐ๋ ๋ชจ๋ ์ง์ญ์ ๊น์ด ์๊ฒ ํ์ด๋ด์ผํ๋ ๊น์ด ์ฐ์ ํ์(DFS)๋ณด๋ค
- ํ์ฌ ์์น์์๋ถํฐ ๊ฐ๊น์ด ์์น๋ฅผ ํ์ํ๋ฉด์ ๋๊ฒ ๊ฑฐ๋ฆฌ๋ฅผ ํ์ํ๋ ๋๋น ์ฐ์ ํ์(BFS) ์๊ณ ๋ฆฌ์ฆ์ ์ ํํ๋ ๊ฒ์ด ๋ฐ๋์ง
1function solution(maps) {2let answer = -13const X_LEN = maps.length // maps์ ํ4const Y_LEN = maps[0].length // maps์ ์ด5const DIRECTION = [6[1, 0], // ์7[0, 1], // ์ฐ8[-1, 0], // ํ9[0, -1], // ์ข10]1112// // BFS์ ์ฌ์ฉํ queue๋ฅผ ์์ฑ13const mapsQueue = []1415maps[0][0] = 0 // ์์ ์์น1617// ์ฒซ ์์์ ๋ฌด์กฐ๊ฑด ๊ฐ์ฅ ์ข์ธก์ ๊ฐ์ฅ ์๋จ์์ ์์ํ๋ฏ๋ก18// 0, 0 ์ขํ์ ์ด๋ํ ์นธ ์ ๊น์ง ํด์ [0, 0, 1]19mapsQueue.push([0, 0, 1])2021while (mapsQueue.length > 0) {22const [x, y, distance] = mapsQueue.shift()2324if (x === X_LEN - 1 && y === Y_LEN - 1) {25answer = distance26break27}2829for (let i = 0; i < DIRECTION.length; i++) {30const [nextX, nextY] = [x + DIRECTION[i][0], y + DIRECTION[i][1]]31if (nextX < 0 || nextX >= X_LEN || nextY < 0 || nextY >= Y_LEN || maps[nextX][nextY] === 0) {32continue33}3435maps[nextX][nextY] = 036mapsQueue.push([nextX, nextY, distance + 1])37}38}3940return answer41}