[백준] 16987번 계란으로 계란치기(파이썬)

서봉성·2023년 6월 23일
0

코딩테스트

목록 보기
24/27

문제

https://www.acmicpc.net/problem/16987

코드

n=int(input())

arr=[list(map(int, input().split())) for _ in range(n)]

brokes=[0]*n
ans=0

def back(arr, brokes, idx):
    
    global n
    
    if idx==n:
        global ans
        ans=max(ans, brokes.count(1))
        return
    
    if brokes[idx]==1:
        back(arr, brokes, idx+1)
        return
    
    isTrue=True
    
    for i in range(n):
        if brokes[i]==1 or idx==i:
            continue
        
        isTrue=False
        arr[idx][0]-=arr[i][1]
        arr[i][0]-=arr[idx][1]
        if arr[idx][0]<=0:
            brokes[idx]=1
        if arr[i][0]<=0:
            brokes[i]=1
            
        back(arr, brokes, idx+1)
        
        brokes[idx]=0
        brokes[i]=0
        
        arr[idx][0]+=arr[i][1]
        arr[i][0]+=arr[idx][1]
            
    if isTrue:
        back(arr, brokes, idx+1)
    
back(arr, brokes, 0)
print(ans)
profile
OverStudy

0개의 댓글