[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] LV.2 ํƒ€๊ฒŸ ๋„˜๋ฒ„

 

1. ๋ฌธ์ œ : Link

์ •์ˆ˜๊ฐ€ ๋“ค์–ด์žˆ๋Š” ๋ฐฐ์—ด์ด ์ฃผ์–ด์ง€๊ณ  ํ•ด๋‹น๊ฐ’์˜ +- ๋ชจ๋“  ๊ฒฝ์šฐ์˜์ˆ˜์˜ ๊ฒฐ๊ณผ๊ฐ€ target๋„˜๋ฒ„์™€ ๊ฐ™์€ ๊ฒฝ์šฐ๊ฐ€ ๋ช‡๊ฐ€์ง€์ธ์ง€ returnํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜

 

2. ํ’€์ด

1) deque๋ฅผ ์ด์šฉํ•œ BFS

  1-> (0 or 2) -> (1 or -1) -> (1 or 3) 

2) stack์„ ์ด์šฉํ•œ DFS

  1 -> 0 -> -1 

 

3. ์ฝ”๋“œ

1)

from collections import deque
def solution(numbers, target):
    answer = 0
    queue = deque()
    n = len(numbers)
    queue.append([numbers[0],0])
    queue.append([-1*numbers[0],0])
    while queue:
        temp, idx = queue.popleft()
        idx += 1
        if idx < n:
            queue.append([temp+numbers[idx], idx])
            queue.append([temp-numbers[idx], idx])
        else:
            if temp == target:
                answer += 1
    return answer

2)

def solution(numbers, target):
    answer = 0
    queue = [[numbers[0],0], [-1*numbers[0],0]]
    n = len(numbers)
    while queue:
        temp, idx = queue.pop()
        idx += 1
        if idx < n:
            queue.append([temp+numbers[idx], idx])
            queue.append([temp-numbers[idx], idx])
        else:
            if temp == target:
                answer += 1
    return answer

์ž๋ฐ” (dfs)

class Solution {
    static int answer = 0;
    
    public int solution(int[] numbers, int target) {        
        int id = 0;
        int len = numbers.length;
        dfs(numbers, +numbers[id], id+1, len, target);
        dfs(numbers, -numbers[id], id+1, len, target);
        return answer;
    }
    
    private  void dfs(int[] numbers, int num, int id, int len, int target){
        if(id < len) {
            dfs(numbers, num+numbers[id], id+1, len, target);
            dfs(numbers, num-numbers[id], id+1, len, target);
        } else{
            if(num == target) answer++;
        }
    }
    
}
  • ๋„ค์ด๋ฒ„ ๋ธ”๋Ÿฌ๊ทธ ๊ณต์œ ํ•˜๊ธฐ
  • ๋„ค์ด๋ฒ„ ๋ฐด๋“œ์— ๊ณต์œ ํ•˜๊ธฐ
  • ํŽ˜์ด์Šค๋ถ ๊ณต์œ ํ•˜๊ธฐ
  • ์นด์นด์˜ค์Šคํ† ๋ฆฌ ๊ณต์œ ํ•˜๊ธฐ