난이도 있는 DP(Dynamic Programming) 문제였다.
아무리 생각해도 도저히 생각이 나지 않아 결국 다른 사람들의 풀이를 참고했다.
왜 DP인가?
우리가 구해야 하는 것은 최소 몇 개의 N을 써서 number를 만들 수 있는가? 이다.
그렇다면 1개, 2개, … X개 까지 한번 직접 써봐야 할 것이다.
- 1개 : N만 사용 가능하다.
- 2개 : N을 이어 붙인 NN과 (N ? N)이 될 것이다.
- 3개 : N을 3개 붙인 NNN 또는 (N1 ? N2)가 될 수 있다.
- 4개 : N을 4개 붙인 NNNN 또는 (N1 ? N3)이나 (N2 ? N2)가 될 수 있다.
- 5개 : N을 5개 붙인 NNNNN 또는 (N1 ? N4)나 (N2 ? N3)이 될 수 있다.
위 전개를 보았을 때, 이전에 계산해 놓은 값을 이용하는 DP임을 알 수 있다.
구현
먼저, 사칙연산의 결과를 저장하기 위해선 각 N의 수마다 배열이 달려야한다.
즉, 2차원 배열에 저장을 해야하는데 그러기에는 공간이 매우 커질 것이다.
따라서 그나마 중복된 값을 제거할 수 있는 Unordered_Set 을 이용하자!