반응형
https://programmers.co.kr/learn/courses/30/lessons/42895
아래와 같이 5와 사칙연산만으로 12를 표현할 수 있다.
12 = 5 + 5 + (5 / 5) + (5 / 5)
12 = 55 / 5 + 5 / 5
12 = (55 + 5) / 5
5를 사용한 횟수는 각각 6,5,4 입니다. 그리고 이중 가장 작은 경우는 4다.
이처럼 숫자 N과 number가 주어질 때, N과 사칙연산만 사용해서 표현 할 수 있는 방법 중 N 사용횟수의 최솟값을 return 하도록 solution 함수를 작성해라.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | #include <string> #include <vector> using namespace std; // 8보다 큰 경우는 -1을 return 해야하므로 초기값을 9로 한다. int answer = 9; void cal(int n, int goal, int cnt, int sum) { // 8보다 큰 경우 if (cnt > 8) return; // 목표값 if (sum == goal) { if (answer > cnt) answer = cnt; } int tmp = 0; for (int i = 1; i <= 8; i++) { // n을 추가 tmp = (tmp*10) + n; // 사칙연산 cal(n, goal, cnt+i, sum + tmp); cal(n, goal, cnt+i, sum - tmp); cal(n, goal, cnt+i, sum / tmp); cal(n, goal, cnt+i, sum * tmp); } } int solution(int N, int number) { cal(N, number, 0, 0); if (answer > 8) answer = -1; return answer; } | cs |
반응형
'프로그래머스' 카테고리의 다른 글
[프로그래머스] level 3 - 가장 먼 노드, C++ (0) | 2020.05.08 |
---|---|
[프로그래머스] level 3 - 네트워크, C++ (0) | 2020.05.07 |
[프로그래머스] 2019 카카오 개발자 겨울 인턴십 - 징검다리 건너기, C++ (0) | 2020.05.05 |
[프로그래머스] 2019 KAKAO BLIND RECRUITMENT - 후보키, C++ (1) | 2020.05.05 |
[프로그래머스] 2019 카카오 개발자 겨울 인턴십 - 불량 사용자, C++ (0) | 2020.05.05 |
댓글