문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/42895
동적 계획법(Dynamic Programming)
주어진 최적화 문제를
재귀적인 방식으로 보다 작은 부분 문제로 나누어
부분 문제를 풀어, 이 해를 조합하여 전체 문제의 답에 이르는 방식
- 알고리즘의 진행에 따라 탐색해야 할 범위를 동적으로 결정함으로써 탐색 범위를 한정할 수 있음
- Knapsack Problem : 참고 싸이트 https://gsmesie692.tistory.com/113
문제 해결
- N을 한번 사용해서 만들 수 있는 수들 -> N을 두번 사용해서 만들 수 있는 수들 -> N을 세번 사용해서 만들 수 있는 수들 -> 하다가 나오는 수를 리턴
- 만약 8번까지 안나오면 -1
def solution(N, number):
if N == number: # 1개 가지고 만들수 있는 경우는 따로 체크해 줘야함
return 1
s = [set() for _ in range(8)] # n을 1번 부터 8번까지 사용해 만들수 있는 경우의 수
for i, x in enumerate(s, start=1):
x.add(int(str(N) * i))
for i in range(1, len(s)):
for j in range(i):
for op1 in s[j]:
for op2 in s[i - j - 1]:
s[i].add(op1 + op2)
s[i].add(op1 - op2)
s[i].add(op1 * op2)
if op2 != 0:
s[i].add(op1 // op2)
if number in s[i]:
answer = i + 1
break
else:
answer = -1
return answer
'프로그래머스 AI 데브코스 5기 > CS' 카테고리의 다른 글
Basis of Cloud Service - AWS를 활용한 인공지능 모델 배포 (0) | 2023.03.17 |
---|---|
선형 배열(Linear Array) (0) | 2023.03.16 |
힙(Heap) 대표 문제 풀이: 더 맵게 (0) | 2023.03.16 |
정렬 - 가장 큰 수 (0) | 2023.03.15 |
탐욕법(Greedy) 대표 문제 풀이: 체육복 (0) | 2023.03.15 |