- ํ
- Android
- ์์ฐ๊ธฐ์ด
- ๋์คํฌ์ปจํธ๋กค๋ฌ
- ํ๋ก๊ทธ๋๋ฐํ ์คํธ
- ์ํ
- ํ๋ก๊ทธ๋๋จธ์ค
- ์๋ฐ
- ํ์๋ฒ
- java
- ์๊ณ ๋ฆฌ์ฆ์คํฐ๋
- ์๊ณ ๋ฆฌ์ฆ
- ํ๊ฒ๋๋ฒ
- MyBatisUserGuide
- ios
- Heap
- PriorityQueue
- ์๋๋ก์ด๋
- ์ค์ํํธ
- ์ฑ๊ฐ๋ฐ
- androidstudio
- ์๋๋ก์ด๋์คํ๋์ค
- iOS์ฑ๊ฐ๋ฐ
- CannotResolveSymbol
- SWIFT
- ์์ฐ
- ์ค๊ดํธ์์๋ฏธ
- ์ฝ๋ฉํ ์คํธ
- programmers
- ๊ณ ๋์ KIT
'๊ฐ๋ฐ'์๊ตญ ๐พ
[ํ๋ก๊ทธ๋๋จธ์ค] ๊น์ด/๋๋น ์ฐ์ ํ์(DFS/BFS) ํ๊ฒ๋๋ฒ _ ์๋ฐJava ๋ณธ๋ฌธ
[ํ๋ก๊ทธ๋๋จธ์ค] ๊น์ด/๋๋น ์ฐ์ ํ์(DFS/BFS) ํ๊ฒ๋๋ฒ _ ์๋ฐJava
young_9 2020. 7. 8. 17:50๋์ด๋: Level 2
1. ๋ฌธ์
| ๋ฌธ์ ์ค๋ช
n๊ฐ์ ์์ด ์๋ ์ ์๊ฐ ์์ต๋๋ค. ์ด ์๋ฅผ ์ ์ ํ ๋ํ๊ฑฐ๋ ๋นผ์ ํ๊ฒ ๋๋ฒ๋ฅผ ๋ง๋ค๋ ค๊ณ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด [1, 1, 1, 1, 1]๋ก ์ซ์ 3์ ๋ง๋ค๋ ค๋ฉด ๋ค์ ๋ค์ฏ ๋ฐฉ๋ฒ์ ์ธ ์ ์์ต๋๋ค.
-1+1+1+1+1 = 3
+1-1+1+1+1 = 3
+1+1-1+1+1 = 3
+1+1+1-1+1 = 3
+1+1+1+1-1 = 3
์ฌ์ฉํ ์ ์๋ ์ซ์๊ฐ ๋ด๊ธด ๋ฐฐ์ด numbers, ํ๊ฒ ๋๋ฒ target์ด ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋ ์ซ์๋ฅผ ์ ์ ํ ๋ํ๊ณ ๋นผ์ ํ๊ฒ ๋๋ฒ๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
| ์ ํ ์ฌํญ
- ์ฃผ์ด์ง๋ ์ซ์์ ๊ฐ์๋ 2๊ฐ ์ด์ 20๊ฐ ์ดํ์ ๋๋ค.
- ๊ฐ ์ซ์๋ 1 ์ด์ 50 ์ดํ์ธ ์์ฐ์์ ๋๋ค.
- ํ๊ฒ ๋๋ฒ๋ 1 ์ด์ 1000 ์ดํ์ธ ์์ฐ์์ ๋๋ค.
| ์ ์ถ๋ ฅ ์
numbers | target | return |
[1, 1, 1, 1, 1] | 3 | 5 |
2. ์๊ณ ๋ฆฌ์ฆ by Yoon
์ด ๋ฌธ์ ๋ DFS์ ๊ฐ์ฅ ๋ํ์ ์ธ ๋ฌธ์ ๋ผ ํ ์ ์๋๋ฐ, ์ฐ์ ์ ๊ทธ๋ฆผ์ ์์๋ก ๋ค์ด ์๊ณ ๋ฆฌ์ฆ์ ์ค๋ช ํ๋๋ก ํ๊ฒ ๋ค.
- input ๊ฐ์ผ๋ก ๋ค์ด์ค๋ numbers์ ๋ฐฐ์ด ๊ธธ์ด๋งํผ level์ ๋์์ง๋ค.
- ์์์ (start)์ ๊ธฐ์ค์ผ๋ก +์ผ ์๋ ์๊ณ , -์ผ ์๋ ์๊ธฐ ๋๋ฌธ์ ๋ ๊ฐ๋ left์ right๋ก ๋๋์ด DFS๊ฐ ์ ์ฉ๋๋ค.
- ์ฌ๊ท(recursion) ํจ์๊ฐ ์ฌ์ฉ๋๋ค.
1. ์ฐ์ dfs๋ผ๋ ํจ์๋ฅผ ํธ์ถํ ๋ ์ธ์ ๊ฐ์ผ๋ก๋ numbers์ ๋ฐฐ์ด, target, ๊ทธ๋ฆฌ๊ณ ์ถ๊ฐ์ ์ผ๋ก level ๊ฐ(level)๊ณผ ํด๋น ๋ ๋ฒจ๊น์ง์ ์์ ํฉ(sum)์ด ํ์ํ๋ค. ๋ฐ๋ผ์, ์ฒ์์๋ level์ด 0์ด๊ณ sum๋ 0์ด๋ฏ๋ก dfs(numbers, target, 0, 0)์ผ๋ก ์์ํ๋ค.
2. ๊ฒฝ์ฐ์ ์๋ +์ -์ด๋ฏ๋ก level์ ์ฆ๊ฐ์ํค๋ ๋์์ (์ง๊ธ๊น์ง ๋์ ๋ sum + level๊น์ง์ ์์ ํฉ์ธ numbers[level])๋ฅผ ์ธ์๋ก ์์ ํ์ฌ dfs๋ฅผ ๋ค์ ํธ์ถํ๋ค.
3. recursion์ ์ข ๋ฃ์ํค๋ ์กฐ๊ฑด๋ฌธ์ผ๋ก๋ level์ด numbers ๋ฐฐ์ด์ ๊ธธ์ด์ ๋์ผํด ์ก์ ๋ ๋ชจ๋ ์์์ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ค ๋ณด์๋ค๋ ๋ป์ด๋ฏ๋ก ํด๋น ์กฐ๊ฑด๋ฌธ์ ๋ฐ๋ผ ๊ฐ์ return ํด์ค๋ค.
3.1 ์ด๋ sum์ด ๋ชฉํ๋ก ํ๋ target ๊ฐ๊ณผ ์ผ์นํ๋ฉด 1์ return ํ๋ค.
3.2 ๊ทธ๋ ์ง ์์ผ๋ฉด 0์ return ํ๋ค.
4. ๊ทธ๋ ๊ฒ ์กฐ๊ฑด์ ๋ง๋ target๊ณผ sum์ด ๋์ผํ ๊ฒฝ์ฐ์๋ง return ํ๋ 1์ ๊ฐ์ด ๋์ ๋๋ฉด์ answer๊ฐ ์ฆ๊ฐํ๋ค.
์ต์ข ์ ์ผ๋ก๋ ๋ฌธ์ ์์ ์ฃผ์ด์ง ์์ ์ ๋ํด ์๋์ ๊ฐ์ด ๊ทธ๋ฆด ์ ์๊ณ , ๋นจ๊ฐ ๋๊ทธ๋ผ๋ฏธ๊ฐ ๋ต์ด ๋๋ค!
3. ์์ค์ฝ๋
class Solution {
public int solution(int[] numbers, int target) {
return dfs(numbers, target, 0, 0);
}
public int dfs(int[] numbers, int target, int level, int sum){
// ๋ฐฐ์ด ๊ธธ์ด๋งํผ level์ด ์ฆ๊ฐํ๊ณ , ๊ฐ ์์๋ค์ ํฉ์ด target๊ณผ ๋์ผํ ๊ฒฝ์ฐ
if(level == numbers.length){
if(target == sum) return 1;
else return 0;
}
// left // right
return dfs(numbers, target, level+1, sum + numbers[level])+ dfs(numbers, target, level+1, sum - numbers[level]);
}
}
4. ๋๋์
๋ฌธ์ ๋ฅผ ์ฝ์๋ง์ DFS๋ผ๋ ๊ฒ์ ํ ๋ฒ์ ํ์ ๋์๊ณ , DFS์ ๋ํ์ ์ธ ๋ฌธ์ ๋ผ๊ณ ์๊ฐํ๋ค.recursion์ด๊ธฐ ๋๋ฌธ์ ๋ฐ๋ก๋ฐ๋ก ๋ ์ค๋ฅด์ง๋ ์์์ง๋ง, dfsํจ์๋ฅผ ํธ์ถํ ๋๋ง๋ค ๋ฌ๋ผ์ ธ์ผ ํ๋ ๊ฐ๊ณผ recursion์ ๋๋ด์ผ ํ๋ ์กฐ๊ฑด๋ค์ ์๊ฐํด๋ณด๋ ๊ธ๋ฐฉ ํด๊ฒฐํ ์ ์์๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฌด์๋ณด๋ค ์๋ฆ์ด์๋ ๊ฑด ๋ด๊ฐ ์ง ์ฝ๋๊ฐ ํ๋ก๊ทธ๋๋จธ์ค '๋ค๋ฅธ ์ฌ๋์ ํ์ด'์์ ์ธ๊ธฐ ์์๊ฐ ๋์ ์ฝ๋์ ๋์ผํ๋ค. ์กฐ๊ธ ๋ง์ด ๋ฟ๋ฏํ๋ค!!! @'-'@
[Algo Rhythm๐บ๐]
๋ ์ง: 2020.07.08
'๊ฐ์ธ๊ณต๋ถ > Algo Rhythm๐บ๐' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค] ํ(Heap) ๋ ๋งต๊ฒ _ ์๋ฐJava (0) | 2020.07.15 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค] ํด์(Hash) ์์ฅ _ ์๋ฐJava (0) | 2020.07.13 |
[ํ๋ก๊ทธ๋๋จธ์ค] ์์ ํ์ - ์นดํซ _ ์๋ฐJava (0) | 2020.07.10 |
[ํ๋ก๊ทธ๋๋จธ์ค] ํด์(Hash) ์ ํ๋ฒํธ ๋ชฉ๋ก _ ์๋ฐJava (0) | 2020.07.10 |
[ํ๋ก๊ทธ๋๋จธ์ค] ํ์๋ฒ(Greedy) ๊ตฌ๋ช ๋ณดํธ _ ์๋ฐJava (0) | 2020.07.08 |