nayoungs
항상 끈기있게
nayoungs
  • 분류 전체보기 (275) N
    • Cloud (21)
      • AWS (15)
      • Azure (3)
      • NCP (2)
      • GCP (1)
    • DevOps (68)
      • Docker (16)
      • Kubernetes (50)
      • CICD (2)
    • IaC (25)
      • Ansible (17)
      • Terraform (8)
    • Certification (4)
    • 금융 IT (5)
    • AI (3)
    • Linux (47)
    • 미들웨어 (5)
    • Programming (7)
      • GoLang (3)
      • Spring (4)
    • CS (25)
      • 네트워크 (17)
      • 운영체제 (5)
      • Web (1)
      • 개발 상식 (2)
      • 데이터베이스 (0)
    • Algorithm (59)
      • 프로그래머스 (36)
      • 백준 (18)
      • 알고리즘 정리 (5)
    • ETC (6) N

블로그 메뉴

  • 홈
  • 방명록

공지사항

인기 글

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
nayoungs

항상 끈기있게

Algorithm/프로그래머스

(C++) 프로그래머스 level2 : 타겟 넘버

2022. 2. 10. 19:39
728x90

문제 설명

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

출처: https://programmers.co.kr/learn/courses/30/lessons/43165/questions


#include <iostream>
#include <vector>
using namespace std;

vector<int>nums;
char sign[2] = { '+','-' };
char path[20]; // +, - 부호를 저장
int cnt; //가능한 경우의 수

int getSum() //각 방법의 계산 값
{
	int sum = 0;
	for (int i = 0; i < nums.size(); i++)
	{
		if (path[i] == '+') sum += nums[i];
		else sum -= nums[i];
	}
	return sum;
}

void dfs(int x, int target)
{
	if (x == nums.size()) 
	{
		if (getSum() == target) cnt++; //계산값이 target과 같으면 cnt++
		return;
	}
	for (int i = 0; i < 2; i++)
	{
		path[x] = sign[i];
		dfs(x + 1, target);
	}
}

int solution(vector<int>numbers, int target) {
	nums = numbers; //전역으로 저장
	dfs(0, target);
	return cnt;
}
 

 

728x90
저작자표시 (새창열림)
    'Algorithm/프로그래머스' 카테고리의 다른 글
    • (C++) 프로그래머스 level2 : 게임 맵 최단거리
    • (C++) 프로그래머스 level2 : 최댓값과 최솟값
    • (C++) 프로그래머스 level2 : 가장 큰 수
    • (C++) 프로그래머스 level2 : 영어 끝말잇기
    nayoungs
    nayoungs
    안되면 될 때까지

    티스토리툴바