[SWEA]1486.장훈이의 높은 선반 - Python

syeony·2025년 1월 12일
0

python

목록 보기
21/21


문제 바로가기: https://swexpertacademy.com/main/talk/solvingClub/problemView.do?solveclubId=AZPceq6qYUoDFAWB&contestProbId=AV2b7Yf6ABcBBASw&probBoxId=AZPceq6qYUsDFAWB&type=PROBLEM&problemBoxTitle=%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98+Track+%28%EB%82%9C%EC%9D%B4%EB%8F%84+%EC%83%81%29&problemBoxCnt=3

보자마자 완전탐색 문제인것은 알았으나, 문제는...
DFS, BFS 공부를 열심히 하지 않아서 까먹고 또 까먹고...
그래서 이것도 구글링으로 답을 찾아보았다

답안

# 보자마자 완전탐색 문제라는건 알았으나 dfs 다 까먹어서 다시 찾아봄
# 내가 푼게 아님

T = int(input())

for tc in range(1,T+1):

    def dfs(index,sum):
        global answer

        # 가지치기라는데 굳이 안넣어도 패스됨...
        # if answer<=sum:
        #     return
        
        # 종료조건(if문을 저렇게 따로 쓴데는 이유가 있다)
        if index==n:
            if b<=sum<answer:
                answer = sum
            return

        dfs(index+1,sum)
        dfs(index+1,sum+arr[index])

    n,b = map(int,input().split())
    arr = list(map(int,input().split()))

    answer = 200000
    dfs(0,0)
    print(f"#{tc} {answer-b}")

재귀법을 사용하였는데 저 부분이 이해가 안되서 아이패드에다 그림을 그리며 이해해보려 노력했다


하나하나 따져보니 종료조건도, 재귀함수도 모두 이해할 수 있었다.

그런데, 비슷한 문제가 나왔을때 또 풀 수 있을지...의문이다

profile
모바일 어플리케이션, cross platform과 iOS에 관심이 많은 개발자 오승연입니다

0개의 댓글

관련 채용 정보