[ํ๋ก๊ทธ๋๋จธ์ค] 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++;
}
}
}
'๐ป Coding Problems Solving > DFS | BFS | Backtracking' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ 1303] ์ ์-์ ํฌ (0) | 2022.07.04 |
---|---|
[BOJ 1260] DFS์ BFS (0) | 2022.07.01 |
[BOJ 17070] ํ์ดํ ์ฎ๊ธฐ๊ธฐ1 (java) (0) | 2022.07.01 |
[BOJ 2667] ๋จ์ง๋ฒํธ๋ถ์ด๊ธฐ (0) | 2022.06.29 |
[BOJ 14888] ์ฐ์ฐ์ ๋ผ์๋ฃ๊ธฐ (0) | 2022.06.25 |
์ต๊ทผ๋๊ธ