아래와 같이 5와 사칙연산만으로 12를 표현할 수 있습니다.
12 = 5 + 5 + (5 / 5) + (5 / 5)
12 = 55 / 5 + 5 / 5
12 = (55 + 5) / 5
5를 사용한 횟수는 각각 6,5,4 입니다. 그리고 이 중 가장 작은 경우는 4입니다.
이처럼 숫자 N과 number가 주어질 때, N과 사칙연산만 이용해서 표현 할 수 있는 방법 중 N 사용횟수의 최솟값을 return 하도록 solution 함수를 작성하세요.
제한사항
입출력 예
N: 5
number: 12
return 4
예를 들어
N이 두 번 사용된 N = 2
집합은
N = 1
N = 1
의 조합에 의해서 만들 수 있다.
N = 3
인 집합은,
N = 1
N = 2
N=2
, N=1
는 앞의 경우와 중복됨을 알 수 있다. 즉 만들고자 하는 사용 횟수 집합 크기의 절반까지 확인한다. def solution(N, number):
S = [0, {N}]
for i in range(2, 9):
case_set = {int(str(N)*i)}
for i_half in range(1, i//2+1): # S[i_half] S[1]
for x in S[i_half]:
for y in S[i-i_half]:
case_set.add(x+y)
case_set.add(x-y)
case_set.add(y-x) # y-x 케이스 추가
case_set.add(x*y)
if x != 0:
case_set.add(y//x)
if y != 0:
case_set.add(x//y)
if number in case_set:
return i
S.append(case_set)
return -1
print(solution(2, 11))
오 잘보고있습니다! 한가지 궁금한게있네요.
N = 3인 집합은,
N = 1
N = 2
조합에 의해서 만들 수 있다.
N=2, N=1 는 앞의 경우와 중복됨을 알 수 있다. 즉 만들고자 하는 사용 횟수 집합 크기의 절반까지 확인한다.
여기 부분에서, 예를들어 N=1, N=1, N=1 이렇게도 계산을 할수있지 않을가요? 그런부분이 어디에 명시되어있는지 궁금합니다.