https://programmers.co.kr/learn/courses/30/lessons/42895
코딩테스트 연습 - N으로 표현
programmers.co.kr
DP는 진짜 너무 어렵다
풀이
1. 연산 방식으로 인한 count이기 때문에, 배열을 사용한 DP가 아닌, 함수내에서 answer를 업데이트 하는 방식을 사용
2. 연산 결과가 정답과 일치하면, 숫자를 사용한 횟수를 answer와 비교
3. for문을 사용하는 이유는
ex) 55를 쓴다고 그러면 숫자 2개를 쓰는거니까, cnt에 이 자릿수만큼 더해줘야 한다.
#include <string>
#include <vector>
#include <limits>
using namespace std;
int answer = numeric_limits<int>::max();
void dp(int goal,int cnt,int now,int N)
{
int value = 0;
if(cnt >8)
return;
if(now == goal)
{
answer = min(answer,cnt);
return;
}
for(int i=0;i<8;i++)
{
value = N + 10*value;
dp(goal, cnt+i+1,now+value,N);
dp(goal, cnt+i+1,now-value,N);
dp(goal, cnt+i+1,now*value,N);
dp(goal, cnt+i+1,now/value,N);
}
}
int solution(int N, int number) {
dp(number,0,0,N);
if(answer >8)
answer = -1;
return answer;
}
'c++ > 프로그래머스' 카테고리의 다른 글
백준 2493 : 탑 c++ (0) | 2021.07.01 |
---|---|
프로그래머스 : 등굣길 c++ (DP 연습) (0) | 2021.06.23 |
프로그래머스 : 큰 수 만들기 c++ (0) | 2021.06.20 |
프로그래머스 : 조이스틱 c++ (1) | 2021.06.20 |
프로그래머스 : 위장 C++ (0) | 2021.06.19 |