'๊ฐœ๋ฐœ'์ž๊ตญ ๐Ÿพ

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๊นŠ์ด/๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰(DFS/BFS) ํƒ€๊ฒŸ๋„˜๋ฒ„ _ ์ž๋ฐ”Java ๋ณธ๋ฌธ

๊ฐœ์ธ๊ณต๋ถ€/Algo Rhythm๐Ÿ•บ๐Ÿ’ƒ

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๊นŠ์ด/๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰(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

Comments