본문 바로가기
알고리즘

[알고리즘] 숫자 만들기

by keel_im 2021. 4. 5.
반응형

포인트

  • 재귀를 잘 사용을 할 수 있는가?  생각해 볼 수 있는 문제입니다. 생각보다 이 문제를 풀면 이해하기가 쉽습니다. 이런 패턴도 잘 익히시면 좋을 것 같습니다. 

🧶문서는 항상 수정될 수 있습니다. 비판은 환영합니다. 

python

import sys

sys.stdin = open('input.txt')


def go(index: int, total: int, plus: int, minus: int, multiple: int, divide: int) -> None:
	global max_result, min_result
	
	if not plus and not minus and not multiple and not divide:
		max_result = max(max_result, total)
		min_result = min(min_result, total)
		return
	
	if plus:
		go(index + 1, total + data[index], plus - 1, minus, multiple, divide)
	# 플러스를 제일 먼저 다 지운다.
	
	if minus:
		go(index + 1, total - data[index], plus, minus - 1, multiple, divide)
	# 마이너스를 제일 먼저 다 지운다.
	
	if multiple:
		go(index + 1, total * data[index], plus, minus, multiple - 1, divide)
	# 곱셈을 제일 먼저 다 지운다.
	
	if divide:
		go(index + 1, int(total / data[index]), plus, minus, multiple, divide - 1)


# 나눗셈을 제일 먼저 다 지운다.


for test in range(1, int(input()) + 1):
	n = int(input())
	plus, minus, multiple, divide = map(int, input().split())
	data = list(map(int, input().split()))
	max_result = -987654321
	min_result = 987654321
	go(1, data[0], plus, minus, multiple, divide)
	print('#{} {}'.format(test, abs(max_result - min_result)))
반응형

'알고리즘' 카테고리의 다른 글

[알고리즘] 키패드 누르기  (0) 2021.04.06
[알고리즘] 수영장  (0) 2021.04.05
[알고리즘] 전위, 중위, 후위 순회 (Traverse)  (0) 2021.04.05
[알고리즘] 드래곤 커브  (0) 2021.04.03
[알고리즘] 사다리 조작  (0) 2021.04.01

댓글