코딩테스트/BOJ

[SW] [DFS] [조합] 9229. 한빈이와 Spot Mart

박소민 2023. 3. 5. 17:10
9229. 한빈이와 Spot Mart
 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

  • 내 풀이
    • 정렬 후 맨앞, 맨뒤값 합해가면서 
    • 합보다 넘어가면 lpoint -1
    • 합보다 작거나 같으면 fpoint+1
#최대 무게 합 출력
#2봉지만 사야함

T=int(input())
for tc in range(1,T+1):
    #과자봉지 개수n, 무게 합 제한 m
    n,m=map(int,input().split())
    snack=list(map(int,input().split()))
    snack.sort()

    ssum=0
    fpoint=0
    lpoint=n-1

    while fpoint<lpoint:
        print(fpoint, lpoint)
        front=snack[fpoint]
        last=snack[lpoint]
      
        if front+last>m:
            lpoint-=1
            continue

        #넘지않는 경우
        ssum=max(ssum, front+last)
        fpoint+=1

    if ssum==0:
        ssum=-1
    print("#{} {}".format(tc, ssum))

 

  • 다른 사람 풀이
    • 수정할 필요없이 처음 생성 시 max=-1 해놓으면 됨
    • 조합, dfs
      • 여러개 중 2봉지만 조합해서 sum 계산
#최대 무게 합 출력
#2봉지만 사야함


T=int(input())
for tc in range(1,T+1):
    #과자봉지 개수n, 무게 합 제한 m
    n,m=map(int,input().split())
    snack=list(map(int,input().split()))
    maxSum=-1
  
    def dfs(depth, sum, start):
        global maxSum
        if depth==2: #두봉지 선택되면
            if sum>m:
                return
            maxSum=max(maxSum, sum)
            return

        for i in range(start, n):
            dfs(depth+1, sum+snack[i], i+1)

    dfs(0,0,0)
    print("#{} {}".format(tc, maxSum))

 

'코딩테스트 > BOJ' 카테고리의 다른 글

[백준] [BFS] 1325.효율적인 해킹  (0) 2023.03.06
다시 풀어봐야할 문제  (0) 2023.03.05
[백준] [BFS] 2606. 바이러스  (0) 2023.03.05
[백준] [DFS] 20444. 색종이와 가위  (0) 2023.03.04
[백준] [BFS] 7576. 토마토  (0) 2023.03.04