def solution(N, number):
possible_set = [0,[N]]
# 조합으로 나올수 있는 가능한 숫자들, 여기에 계속 append하며 이후에 사용함
if N == number: #주어진 숫자와 사용해야 하는 숫자가 같은 경우는 1개면 족하므로 1으로 놓는다.
return 1
for i in range(2, 9):
# 2부터 8까지로 횟수를 늘려 간다.
case_set = []
# 임시로 사용할 케이스 셋, 각 I 별로 셋을 만들어 possible set에 붙인다.
basic_num = int(str(N)*i)
# 같은 숫자 반복되는 거 하나를 추가한다.
case_set.append(basic_num)
for i_half in range(1, i//2+1):
# 사용되는 숫자의 횟수를 구해야 하는데, 절반 이상으로 넘어가면 같은 결과만 나올 뿐이므로 절반까지만을 사용한다.
for x in possible_set[i_half]:
for y in possible_set[i-i_half]:
# x와 y를 더하면 i 가 되도록 만든 수다.
print(possible_set)
case_set.append(x+y)
# 각 사칙연산 결과를 더한다.
case_set.append(x-y)
case_set.append(y-x)
case_set.append(x*y)
if y !=0:
case_set.append(x/y)
if x !=0:
case_set.append(y/x)
if number in case_set:
return i
possible_set.append(case_set)
# 최종 결과물 set에 사칙 연산 결과를 더한다.
return -1
#N 이 8까지 답이 없으면 -1을 출력한다.
![]
다른 사람의 접근 방식 활용
- 특정 숫자만큼 5를 사용한 조합을 만들때, 덧셈 조합의 겨우의 수끼리 사칙연산을 해준다.
- 최대 수가 8이기 대문에 연산을 많이 하지 않아 append와 사칙연산 반복이 가능
def solution(triangle):
# dp 테이블 초기화
dp = [[0] * len(triangle) for _ in range(len(triangle))]
dp[0][0] = triangle[0][0]
# 거쳐간 숫자의 최댓값 구하기
for i in range(0, len(triangle) - 1):
for j in range(len(triangle[i])):
dp[i + 1][j] = max(dp[i + 1][j], dp[i][j] + triangle[i + 1][j])
dp[i + 1][j + 1] = max(dp[i + 1][j + 1], dp[i][j] + triangle[i + 1][j + 1])
return max(dp[-1])
# dp 테이블의 마지막 원소들 중 최댓값 반환
![]
def solution(m, n, puddles):
answer = 0
arr = [[0 for y in range(m+1)] for x in range(n+1)]
puddles_arr = [[0 for y in range(m+1)] for x in range(n+1)]
for puddle in puddles:
puddles_arr[puddle[1]][puddle[0]] = 1
arr[1][1] = 1
for x in range(1, n+1):
for y in range(1, m+1):
if x == 1 and y == 1:
continue
if puddles_arr[x][y] == 1:
continue
else:
arr[x][y] = (arr[x-1][y] + arr[x][y-1]) % 1000000007
return arr[n][m]
![]