프로그래머스 [level3] N으로 표현 (Dynamic Programming)

2025. 11. 12. 01:32·Coding Test/Dynamic Programming

문제

 

 

#include <string>
#include <vector>
#include <set>

using namespace std;

int solution(int N, int number) 
{
    int answer = 0;
    
    vector<vector<int>> m_vecDp(9); 
    
    int sum =0; 

    for(int i=1; i<=8; i++)
    {
        sum = 10*sum + N; 
        m_vecDp[i].push_back(sum);
    }
    
    for(int i=2; i<=8; i++)
    {
        for(int k=1; k<i; k++)
        {
            int j= i-k;
                
            for(auto& iter_k : m_vecDp[k])
            {
                for(auto& iter_j : m_vecDp[j])
                {
                    m_vecDp[i].push_back(iter_k + iter_j);
                    m_vecDp[i].push_back(iter_k - iter_j);
                    m_vecDp[i].push_back(iter_k * iter_j);
                    if (iter_j != 0)
                        m_vecDp[i].push_back(iter_k / iter_j);
                }   
            }
              
         }
     }
    
    for(int i=1; i<=8; i++)
    {
        for(auto& iter : m_vecDp[i])
            {
                if(iter == number)
                {
                    answer = i;
                    return answer; 
                }
            }
    }
    
    answer = -1; 
    
    
    
    return answer;
}

 

 

 

 

 문제 접근 순서 

 

1. 처음에는 아무리 생각해도 규칙성을 어떻게 짜야하고 어디까지를 제한을 둬서 반복문을 돌려야 할지 너무 막막했다. 

 

2. 문제를 자세히 보니 최솟값이 8보다 크면 -1을 return 하라고 나와 있는걸 보고 눈치를 채서 

   아 for문을 8이하 까지 돌려라는 말이구나를 눈치 챘다. 

 

3. 하지만 문제의 규칙성을 이해하지 못하여 하나하나 대입해가면서 점화식을 세워봣다.   

Dp[1] =  5 (// 여기서 "1"은 5가 1개 쓰인 것 이라는 의미)  

Dp[2] = (Dp[1] ,DP[1]) , 55  

Dp[3] = (Dp[1], Dp[2]), (Dp[2], Dp[1]) 

 여기서 부터 눈치 챘다. 아  Dp[i] = D[k] + D[j] (i= k+j) 이라는 점화식이 라는 것을 

 

4. 따라서 이제 규칙성을 찾았으니 해당 식을 코드로 작성하였다.

   (주의할 점으로는 "0" 나누기 와 범위 관련 표현이였다.)  

 

5. set으로 중복을 제거하는 편이 효율적이였을것같다 ( vector<vector<int>> 를 vector<set<int>> 로 ) 

'Coding Test > Dynamic Programming' 카테고리의 다른 글

프로그래머스 [Level3] 정수 삼각형 [Dynamic Programming]  (0) 2026.02.20
백준 1149번 "RGB" 거리 (Dynamic Programming)  (0) 2026.02.12
백준 11399번 "피보나치 함수" [Dynamic Programming 점화식]  (0) 2026.01.29
백준 9095번 " 1, 2 ,3" 더하기 [Dynamic Programming]  (0) 2026.01.28
백준 1431번 "1로 만들기" [Dynamic Programming 알고리즘]  (1) 2025.11.11
'Coding Test/Dynamic Programming' 카테고리의 다른 글
  • 백준 1149번 "RGB" 거리 (Dynamic Programming)
  • 백준 11399번 "피보나치 함수" [Dynamic Programming 점화식]
  • 백준 9095번 " 1, 2 ,3" 더하기 [Dynamic Programming]
  • 백준 1431번 "1로 만들기" [Dynamic Programming 알고리즘]
seonhwan2547
seonhwan2547
seonhwan2547 님의 블로그 입니다.
  • seonhwan2547
    seonhwan2547 님의 블로그
    seonhwan2547
  • 전체
    오늘
    어제
    • 분류 전체보기 (80)
      • Unreal Project (17)
        • Khazan 모작 프로젝트 (2)
        • Unreal Study (10)
        • Blueprint (5)
      • Directx11 Project (11)
        • Thymesia 팀 프로젝트 (8)
        • Kaku Ancient Seal 개인 프로젝트 (2)
        • Thymesia Animation Tool 개발 (0)
      • Algorithm (6)
        • Binary_Search (2)
        • Greedy (1)
        • Dynamic Programming (1)
        • A-star (1)
      • Coding Test (31)
        • Brutal Force (2)
        • Sort (5)
        • DFS (3)
        • Binary_Search (4)
        • BFS (6)
        • Hash (2)
        • Dynamic Programming (6)
        • Greedy (1)
        • BackTracking (1)
        • Binary_Tree (1)
      • STL Container (1)
        • unorded_set (0)
        • priority_queue (1)
      • C++ 공부 및 몰랐던점 (8)
        • Smart pointer (1)
      • Visual Studio 설정관련 공부 (1)
      • Console Project (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 블로그 소개
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    hash
    Unreal
    blueprint
    Unreal Engine
    CodingTest
    Game Programming
    GameProgramming
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
seonhwan2547
프로그래머스 [level3] N으로 표현 (Dynamic Programming)