Skip to content

[mingxoxo] programmers_타겟 넘버_Python - #38

Open
mingxoxo wants to merge 3 commits into
sejongbinary:mainfrom
mingxoxo:2025-02-w4-1
Open

[mingxoxo] programmers_타겟 넘버_Python#38
mingxoxo wants to merge 3 commits into
sejongbinary:mainfrom
mingxoxo:2025-02-w4-1

Conversation

@mingxoxo

@mingxoxo mingxoxo commented Mar 2, 2025

Copy link
Copy Markdown
Member

🔗 문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/43165

  • 사용할 수 있는 숫자가 담긴 배열 numbers, 타겟 넘버 target이 매개변수로 주어질 때 숫자를 적절히 더하고 빼서 타겟 넘버를 만드는 방법의 수를 return 하도록 solution 함수를 작성해주세요.

💡 풀이 아이디어

아무 생각 없이 main 브랜치에 파일을 올려 버려서 커밋이 여러 개가 되어버렸네요 ..😅

타겟 넘버를 만족하는 식을 만들기 위해서 모든 경우의 수를 확인해보아야 할 것이라는 점에서 Brute Force 같기도 해서 재귀를 이용해서 DFS로 풀이하였습니다.

오랜만에 재귀 함수를 사용하려고 하니 머리가 잘 안 돌아가더라구요..!
처음에는 아래처럼 값을 저장하는 ans 변수를 사용했는데, GPT에게 물어보아 조금 더 깔끔하게 ans 변수를 사용하지 않고 바로 반환 값으로 정답을 활용하였습니다.

def dfs(numbers, target, res = 0, idx = 0, ans = 0):
    if idx == len(numbers):
        if res == target:
            ans += 1
        return ans
    
    ans = dfs(numbers, target, res + numbers[idx], idx + 1, ans)
    ans = dfs(numbers, target, res - numbers[idx], idx + 1, ans)
    return ans


def solution(numbers, target):
    return dfs(numbers, target)

📝 새로 학습한 내용

다른 사람의 풀이 중 리스트 슬라이싱을 활용한 방법이 있었는데, 이렇게 되면 계속 객체 배열을 생성해야 하기 때문에 메모리가 비효율적일 것 같아 인덱스를 활용하였습니다. 케이스마다 다르겠지만 시간은 아래 코드가 제 코드보다 빨랐고 메모리는 대부분 아주 미세한 차이로 제 코드가 적게 사용하였습니다. 파이썬이 자체적으로 효율적으로 처리하는 것이 있어서 시간이 차이가 나는 것인가 싶은데 아직도 어려운 것 같습니다.. 😂

ef solution(numbers, target):
    if not numbers and target == 0 :
        return 1
    elif not numbers:
        return 0
    else:
        return solution(numbers[1:], target-numbers[0]) + solution(numbers[1:], target+numbers[0])

📚 참고 자료

@mingxoxo mingxoxo added 🪄Programmers 프로그래머스 문제 풀이 🫧Python 풀이 언어 (Python) labels Mar 2, 2025
@mingxoxo mingxoxo self-assigned this Mar 2, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🪄Programmers 프로그래머스 문제 풀이 🫧Python 풀이 언어 (Python)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant