반응형
문제
https://programmers.co.kr/learn/courses/30/lessons/43165
코딩테스트 연습 - 타겟 넘버
n개의 음이 아닌 정수가 있습니다. 이 수를 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다. -1+1+1+1+1 = 3 +1-1+1+1+
programmers.co.kr
풀이
numbers의 인덱스를 노드로 생각하고, 각 인덱스를 방문할 때마다 인덱스에 해당하는 값을 더한 값과, 뺀 값을 이용해서 dfs, bfs 탐색을 진행한다. 탐색이 끝난 후 중첩한 값과 target을 비교한다.
코드
python - dfs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
answer = 0
def dfs(idx, numbers, target, cur):
if idx == len(numbers):
if cur == target:
global answer
answer += 1
return
dfs(idx + 1, numbers, target, cur + numbers[idx])
dfs(idx + 1, numbers, target, cur - numbers[idx])
def solution(numbers, target):
dfs(0, numbers, target, 0)
return answer
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
def solution(numbers, target):
answer = 0
st = []
st.append([0, numbers[0]])
st.append([0, -1 * numbers[0]])
while st:
idx, value = st.pop()
if idx + 1 == len(numbers):
if value == target:
answer += 1
else:
st.append([idx + 1, value + numbers[idx + 1]])
st.append([idx + 1, value - numbers[idx + 1]])
return answer
|
cs |
python - bfs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
from collections import deque
def solution(numbers, target):
answer = 0
q = deque()
q.append([0, numbers[0]])
q.append([0, -1 * numbers[0]])
while q:
idx, value = q.popleft()
if idx + 1 == len(numbers):
if value == target:
answer += 1
else:
q.append([idx + 1, numbers[idx + 1] + value])
q.append([idx + 1, -1 * numbers[idx + 1] + value])
return answer
|
cs |
반응형
'프로그래머스' 카테고리의 다른 글
프로그래머스 - 오픈채팅방 (0) | 2022.02.18 |
---|---|
프로그래머스 - K번째수 (0) | 2022.01.30 |
프로그래머스 - 문자열 압축 (0) | 2021.08.22 |
프로그래머스 - 키패드 누르기 (0) | 2021.08.21 |
프로그래머스 - 크레인 인형뽑기 게임 (0) | 2021.08.20 |