✏️ 문제 링크
https://programmers.co.kr/learn/courses/30/lessons/43165
코딩테스트 연습 - 타겟 넘버
n개의 음이 아닌 정수가 있습니다. 이 수를 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다. -1+1+1+1+1 = 3 +1-1+1+1+
programmers.co.kr
✏️ 문제 설명 (더보기 클릭 👆🏻)
n개의 음이 아닌 정수가 있습니다. 이 수를 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다.
-1+1+1+1+1 = 3 +1-1+1+1+1 = 3 +1+1-1+1+1 = 3 +1+1+1-1+1 = 3 +1+1+1+1-1 = 3
사용할 수 있는 숫자가 담긴 배열 numbers, 타겟 넘버 target이 매개변수로 주어질 때 숫자를 적절히 더하고 빼서 타겟 넘버를 만드는 방법의 수를 return 하도록 solution 함수를 작성해주세요.
제한사항
- 주어지는 숫자의 개수는 2개 이상 20개 이하입니다.
- 각 숫자는 1 이상 50 이하인 자연수입니다.
- 타겟 넘버는 1 이상 1000 이하인 자연수입니다.
입출력 예
numbers / target / return[1, 1, 1, 1, 1] | 3 | 5 |
입출력 예 설명
문제에 나온 예와 같습니다.
✏️ 문제 풀이
기본 dfs 문제인데, N과 M을 이해하고 풀면 좋다!!!!
2021.09.13 - [Algorithm 💫/알고리듬(thm) 문제 모음집 🔮] - 🔮 N과 M 문제 모음집
🔮 N과 M 문제 모음집
✏️ 문제 [백준] - 15649번: N과 M(1) ✅ - 1~N의 자연수로 M 길이의 수열 만들기 [백준] - 15650번: N과 M(2) ✅ - 1~N의 자연수로 M 길이의 중복되지 않는 수열 만들기(조합) [백준] - 15651번: N과 M(3) ✅ -..
ssinee.tistory.com
✏️ 문제 코드
#include <string>
#include <vector>
using namespace std;
#define MAX 21
char cal[MAX];
int answer;
void dfs(int cur, vector<int> num, int target){
if(cur==num.size()){
int r=0;
for(int i=0; i<num.size(); i++){
if(cal[i]=='-'){
r-=num[i];
}else if(cal[i]=='+') r+=num[i];
}
if(r==target) answer++;
}else{
cal[cur]='+';
dfs(cur+1, num, target);
cal[cur]='-';
dfs(cur+1, num, target);
}
}
int solution(vector<int> numbers, int target) {
answer=0;
dfs(0, numbers, target);
return answer;
}
⭐ if feedback and question : comment please⭐
'Algorithm 💫 > Problem Solving' 카테고리의 다른 글
[Softeer] HSAT 7회 정기 코딩 인증평가 기출 - 순서대로 방문(level3, Javascript) (0) | 2024.11.13 |
---|---|
[Softeer] 21년 재직자 대회 예선 - 전광판(level2, Javascript) (0) | 2024.11.12 |
[백준] 13701번: 중복 제거 (0) | 2021.10.05 |
[백준] 11811번: 데스스타 / C++ (0) | 2021.10.05 |
[백준] 3449번: 이진수 연산/ C++ (0) | 2021.10.05 |
댓글