728x90
이 문제는 DP 문제이다.
(DP 링크 추가 예정...)
my full code
#include <string>
#include <vector>
#include <set>
using namespace std;
int nnn(int N, int num){
int result = N;
for(int i=1; i<num; i++){
result = result*10 + N;
}
return result;
}
int solution(int N, int number) {
vector<set<int>> dp(9);
for(int i=1; i<=8; i++){
dp[i].insert(nnn(N, i)); // 숫자 i개 사용
for(int x=1; x<=i; x++){
for(int y=1; y<=i; y++){
if(x+y > 8) break;
for(int a: dp[x]){
for(int b: dp[y]){
if(a+b <= 32000) dp[x+y].insert(a+b);
if(a-b >= 1) dp[x+y].insert(a-b);
if(a*b <= 32000) dp[x+y].insert(a*b);
if(a/b >= 1) dp[x+y].insert(a/b);
}
}
}
}
for(int a: dp[i]){
if(a == number) return i;
}
}
return -1;
}
문제
https://programmers.co.kr/learn/courses/30/lessons/42895
코딩테스트 연습 - N으로 표현
programmers.co.kr
728x90
[접근1]
숫자 N에 대하여 NNN....(num개)을 만들어줄 함수 생성
int nnn(int N, int num){
int result = N;
for(int i=1; i<num; i++){
result = result*10 + N;
}
return result;
}
[접근2]
dp vector를만들어준다.
i번째 원소는 N을 i개 사용하여 만들 수 있는 숫자를 가지고 있다.
기본적으로 NNN.....(i개)를 포함하고있다.
vector<set<int>> dp(9);
for(int i=1; i<=8; i++){
dp[i].insert(nnn(N, i)); // 숫자 i개 사용
...
}
[접근3]
1부터 i개 사용하여 만든 값들을 연산하여 새로운 값을 만들어낸다.
새로 만든 값의 N 사용 횟수는 8을 넘으면 안되며, 그 값은 1이상 32000 이하이다.
for(int i=1; i<=8; i++){
...
for(int x=1; x<=i; x++){
for(int y=1; y<=i; y++){
if(x+y > 8) break;
for(int a: dp[x]){
for(int b: dp[y]){
if(a+b <= 32000) dp[x+y].insert(a+b);
if(a-b >= 1) dp[x+y].insert(a-b);
if(a*b <= 32000) dp[x+y].insert(a*b);
if(a/b >= 1) dp[x+y].insert(a/b);
}
}
}
}
...
}
[접근4]
N을 i개 사용한것에 대하여 앞 과정을 끝내면 i개 사용하여 구한 값들은 다 구해진것이다.
따라서 dp[i]의 값들 중 원하는 값이 있는지 확인하고, 있으면 바로 return한다.
N을 8까지 사용했는데도 원하는 값이 나오지 않았다면 -1을 return한다.
for(int i=1; i<=8; i++){
...
for(int a: dp[i]){
if(a == number) return i;
}
}
return -1;728x90
'coding > algorithm' 카테고리의 다른 글
| [programmers] Lv.2 행렬 테두리 회전하기(c++) (0) | 2022.07.01 |
|---|---|
| [programmers] Lv.2 짝지어 제거하기(c++) (0) | 2022.07.01 |
| [programmers] Lv.1 체육복(c++) (0) | 2022.06.28 |
| [programmers] Lv.2 더 맵게(c++) (0) | 2022.06.27 |
| [programmers] Lv.2 기능개발(c++) (0) | 2022.06.27 |
댓글