dp : 프로그래머스 - n으로 표현

phoenixKim·2021년 10월 3일
0

몇번품?

  • 21년 10월 4일 월요일

풀이전략

  • 끄적이다 보면 동일한 결과값을 삽입해야 하는데, 중복처리하는 것이 효율적이기 때문에
    set을 사용해야 한다.

  • set에 저장된 값 중에서
    s[3] = s[2] vs s[1]
    s[3] = s[1] vs s[2]
    를 해야하는데, set에 있는 모든 값들을 처리해야 하므로 이터레이터를 사용해야 한다.


-> 2번째 for문까지 작성하다가 어떻게 할까??? 고민에 빠졌다...

소스코드

#include <string>
#include <vector>
#include <set>
using namespace std;

int solution(int N, int number) {
    int answer = -1;
    
    set<int>s[9];
    
    s[1].insert(N);
    
    int m = N;
    for(int i = 2; i <= 8; i++)
    {
        m = 10 * m + N;
        s[i].insert(m);
        for(int j = 1; j < i; j++)
        {
            for(auto k : s[i - j])
            {
                for(auto l : s[j])
                {
                    s[i].insert(k + l);
                    s[i].insert(k - l);
                    s[i].insert(k * l);
                    if(l != 0)
                        s[i].insert(k / l);
                    
                }
            }
            
        }
    }
    
    for(int i = 1; i < 9; i++)
    {
        auto iter = s[i].find(number);
        
        //최소값을 찾는 것이므로 인덱스 i는 사용한 횟수를 나타내므로 
        if(iter != s[i].end())
        {
            answer = i;
            break;
        }        
        
    }
    
    
    return answer;
}
profile
🔥🔥🔥

0개의 댓글

관련 채용 정보