article thumbnail image
Published 2022. 9. 30. 17:18

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWIeRZV6kBUDFAVH 

 

SW Expert Academy

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

swexpertacademy.com

 


풀이

def solve(index, AA):
    global max_AA, min_AA, oper
    if index == N:
        max_AA = max(max_AA, AA)
        min_AA = min(min_AA, AA)
        return
    # 계산할 피연산자 solve함수의 매개변수 index를 사용해서 지정
    val = nums[index]
    # 사칙연산의 경우의 수 4개
    candi = [AA+val, AA - val, AA*val, int(AA/val)]

    # 남아있을 때 까지 모든 경우의 수
    if oper[0] > 0:
        oper[0] -= 1
        solve(index+1, candi[0])
        oper[0] += 1
    if oper[1] > 0:
        oper[1] -= 1
        solve(index+1, candi[1])
        oper[1] += 1
    if oper[2] > 0:
        oper[2] -= 1
        solve(index+1, candi[2])
        oper[2] += 1
    if oper[3] > 0:
        oper[3] -= 1
        solve(index+1, candi[3])
        oper[3] += 1

for tc in range(int(input())):
    N = int(input())
    # 연산자의 정보
    oper = list(map(int, input().split()))
    # 피연산자 숫자
    nums = list(map(int, input().split()))

    min_AA = 0xfffffffff
    max_AA = -0xfffffffff

    solve(1, nums[0])

    print(f'#{tc+1}', max_AA - min_AA)

 


해설

  • 백트래킹을 이용하여 연산자의 정보를 빼고 더하며 모든 경우의 수를 만들어준다.

'SWEA' 카테고리의 다른 글

SWEA 1767 프로세서 연결하기 (파이썬)  (1) 2022.10.13
SWEA 2115 벌꿀채취 (파이썬)  (0) 2022.10.06
SWEA 1952 수영장 (파이썬)  (0) 2022.09.30
SWEA 1251 하나로 (파이썬)  (1) 2022.09.30
SWEA 1249 보급로 (파이썬)  (1) 2022.09.30
복사했습니다!