문제 및 코드
1. 생각
// 생각
// numbers를 돌면서 가지치기 하면서 양수 음수로 나누어 numbers 끝까지 경우를 구한 후 수 다 더하면 되는데..
// 깊이 탐색하면 되니까 dfs인듯
// 구현
// numbers의 맨 첫 원소를 기준으로 dfs 돌기
// dfs
// 들어온 원소의 인덱스, 지금까지의 합, numbers 배열을 매개변수로 받는다
// 들어온 인덱스 다음부터 다시 dfs를 돈다
// 이때 음수 양수로 나누어 dfs를 돌게 해야 한다
// 들어온 인덱스가 numbers의 길이와 같으면
// 지금까지의 합이 target과 같은지 비교한 후 답을 1 증가
----
// 생각
// numbers 각각을 돌 때 플러스 마이너스 각각을 붙여가며 가지치기해서 결과를 확인해야 함 \
// numbers를 돌면서 값 하나를 확인하며 재귀적으로 플러스 마이너스 붙인 함수를 부르기
// 구현
// 재귀함수 호출
// 전역 변수로 answer 선언
// 재귀 함수
// 지금까지의 합, numbers 배열, 현재 인덱스를 매개변수로 받기
// 현재 인덱스 == numbers의 길이
// 지금까지의 합이 target과 같다
// 정답 1 증가
// 지금까지의 합이 target과 같지 않다
// 패스
// 현재 인덱스 < numbers의 길이
// 지금까지의 합에 현재 들어온 수 더하기
// numbers 보내기
// index 1 증가
2. 회고
- dfs/bfs 분류로 되어 있어서 dfs일 것이라는 생각을 하긴 했는데 만약 없었다면 쉽게 생각해내지 못했을 수도..
- 그래도 예전보다 dfs 재귀에 대한 이해도가 높아진 걸 느꼈음
- dfs는 종료 조건이랑 매개 변수로 뭘 넘겨줘야 하는지 잘 생각해야 한다는 것을 명심하자
---
- 손으로 풀어보면 가지치기가 계속 되기 때문에 재귀 함수를 만들어야 겠다는 생각이 들었음. 그래서 저번 재귀를 생각하며 재귀함수 만들었는데 약간 뭐가 꼬여서 잘 안 돼서 저번 풀이 참고함
- 저번에 이걸 어떻게 잘 풀어냈는지 생각하며... 비슷하게 접근은 했는데 index 와 sum을 처리하는 부분에서 잘못 생각한 부분이 있었음
3. 체크
풀이 횟수 |
시간 |
정답 여부 |
참고 여부 |
2 |
50분 |
O |
X |
3 |
1시간 |
X |
O |