소스 코드

def dfs(cur_sum, idx):
    global max_res
    global min_res

    # 갱신
    if idx == n:
        if cur_sum > max_res:
            max_res = cur_sum

        if min_res > cur_sum:
            min_res = cur_sum
        return

    for q in range(4):
        if cal[q] != 0:
            if q == 0:
                cal[q] -= 1
                dfs(cur_sum+num[idx], idx+1)

                # 연산자 + 안 해주면 -가 누적
                # 한 바퀴 돌면 0 0 0 0으로 변함
                cal[q] += 1

            elif q == 1:
                cal[q] -= 1
                dfs(cur_sum - num[idx], idx + 1)
                cal[q] += 1

            elif q == 2:
                cal[q] -= 1
                dfs(cur_sum * num[idx], idx + 1)
                cal[q] += 1

            else:
                cal[q] -= 1
                
                # 소수점 버리기 위해 //으로 처리하면
                # 반올림 처리 되어버림
                dfs(int(cur_sum / num[idx]), idx + 1)
                cal[q] += 1

    return

T = int(input())

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

    # 숫자의 개수
    n = int(input())

    # 연산자 + - * / 순서
    cal = list(map(int,input().split()))

    # 수식에 사용되는 숫자
    num = list(map(int,input().split()))

    # 최대값, 최소값
    max_res = -100000000
    min_res = 100000000

    # 현재까지의 합, 확인해야할 숫자의 위치(index)
    dfs(num[0],1)

    print('#{} {}'.format(tc,max_res-min_res))

 


해결 방법

1. 처음 문제를 보고 dfs와 아이디어로 해결하는 방법을 떠올렸고, 우선 dfs로 문제를 접근했는데 잘 풀림

 

2. 문제 해결 중에 시간이 걸렸던 부분은 나눗셈 부분

 

3. 예시에서 나온 3-5/3의 경우 -0.666667? 의 형태로 나오는데, //을 사용할 경우 -1로 처리되기 때문

 

4. int를 넣어서 정수부분만 추출해서 사용해서 해결


느낀 점

 

 

ps. 개인적인 코드와 코드를 작성의 이유를 적은 것입니다.

 

오류적절치 않은 문법이 존재할 수 있으며, 다른 분들께는 굉장히 비효율적인 방법으로 여겨질 수 있습니다.

 

혹시 개선 사항, 오류 및 문제에 대한 수정 사항 등을 댓글로 남겨주신다면 감사한 마음으로 배우고 수정하겠습니다.