소스 코드
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. 개인적인 코드와 코드를 작성의 이유를 적은 것입니다.
오류나 적절치 않은 문법이 존재할 수 있으며, 다른 분들께는 굉장히 비효율적인 방법으로 여겨질 수 있습니다.
혹시 개선 사항, 오류 및 문제에 대한 수정 사항 등을 댓글로 남겨주신다면 감사한 마음으로 배우고 수정하겠습니다.
'코딩 문제해결 > 문제 풀이.SWEA' 카테고리의 다른 글
[SWEA 코딩] [SW 모의역량 테스트] 탈주범 검거 - PYTHON #1953 (0) | 2021.06.20 |
---|---|
[SWEA 코딩] S/W 문제해결 응용 사람 네트워크2 - PYTHON #1263 (0) | 2021.06.19 |
[SWEA 코딩] 러시아 국기 같은 깃발 - PYTHON #4613 (0) | 2021.06.16 |
[SWEA 코딩] 올림픽 종목 투표 - PYTHON #3347 (0) | 2021.06.15 |
[SWEA 코딩] 2016년 요일 맞추기 - PYTHON #5515 (0) | 2021.06.14 |