코딩테스트

[프로그래머스/자바] 타겟 넘버_43165

라임온조 2023. 7. 19. 10:41

문제 및 코드

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