728x90
https://school.programmers.co.kr/learn/courses/30/lessons/42895
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
아직도 DP가 조금 어렵다.
어떤 값을 기준으로 dp 를 만들어야할지,
dp가 1차원일지 2차원일지 판단하지 못한다.
아무래도, 모든 경우의 수를 수기로 써내려가며 점화식을 찾는 연습이 부족한 것 같다.
def solution(N, number):
answer = -1
# dp를 무엇으로 기준으로 잡냐에 따라서 문제를 풀 수 있고 없고가 갈린다.
# 보통 dp에서는 범위가 작게 나온 것이 기준이 되는 경우가 많다.
# "최솟값이 8보다 크면 -1을 return 합니다."라는 조건이 있다.
# 즉, 숫자를 최대 8개까지만 사용가능하는 것이다.
# 이게 이 문제의 핵심이다.
dp = [set() for _ in range(9)] # 1~8 인덱스 사용
for i in range(1, 9):
tmp = int(str(N)*i)
dp[i].add(tmp)
for j in range(0, i):
for item1 in dp[j]:
for item2 in dp[i-j]:
added = item1+item2
dp[i].add(added)
minused = item1-item2
dp[i].add(minused)
multied = item1*item2
dp[i].add(multied)
if item2>0:
divided = item1//item2
dp[i].add(divided)
if number in dp[i]:
return i
return answer
"""
연산 방법 정리 (5가지) : 덧셈, 뺄셈, 나눗셈, 곰셈, 숫자 붙여쓰기
ex : 5
1개 : 5
2개 : 5+5, 5-5, 5/5, 5*5, 55
3개 :
(5+5)+5=15, (5+5)-5=5, (5+5)/5=2, (5+5)*5=50 | (5+5)5=105, 이런건 안되는 듯
(5-5)+5=6, (5-5)-5=-4, (5-5)/5=1/5, (5-5)*5=5
5/5+5, 5/5-5, 5/5/5, 5/5*5
5*5+5, 5*5-5, 5*5/5, 5*5*5
55+5, 55-5, 55/5, 55*5
-> 따라서 점화식은 dp[i]의 원소 = dp[i-j]의 원소 (사칙연산) dp[j]의 원소
"""
# dp가 어려우면 2차원으로 빠진다는 것을 명심하라.
'Algorithm > programmers.co.kr' 카테고리의 다른 글
프로그래머스 연습문제 : 정수 제곱근 판별 (0) | 2024.10.24 |
---|---|
프로그래머스 고득점 kit 풀기 #DFS/BFS (0) | 2022.03.19 |
프로그래머스 고득점 kit 풀기 #정렬 (0) | 2022.03.13 |
프로그래머스 고득점 kit 풀기 #스택/큐 (0) | 2022.03.12 |
프로그래머스 고득점 kit 풀기 #해시 (0) | 2022.03.12 |