[알고리즘][C++][DFS] 특정 수 만들기 (MicroSoft 인터뷰 문제)

2022. 6. 30. 22:46·Algorithm
반응형

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <algorithm>
#include <vector>
using namespace std;

//	경로까지 출력하는 코드
int a[11], n, m, cnt = 0, path[10];
void DFS(int L, int sum) {
	if (L == n + 1) {
		if (sum == m) {
			cnt++;
			for (int i = 1; i < L; i++) {
				printf("%d ", path[i]);
			}
			puts("");
		}
	}
	else {
		path[L] = a[L];
		DFS(L + 1, sum + a[L]);
		path[L] = 0;
		DFS(L + 1, sum);
		path[L] = -a[L];
		DFS(L + 1, sum - a[L]);
	}
}

int main() {
	//freopen("input.txt", "rt", stdin);
	int i;
	scanf("%d %d", &n, &m);
	for (i = 1; i <= n; i++) {
		scanf("%d", &a[i]);
	}
	DFS(1, 0);
	if (cnt == 0) printf("-1\n");
	else printf("%d\n", cnt);
	return 0;
}

 

 

이 DFS 문제에서는 분기가 세가지로 나누어집니다. 

  1. 더할 때
  2. 뺄 때
  3. 연산에 포함시키지 않을 때

이를 생각하면서 탈출 조건을 걸어주고, PATH 배열을 통해서 연산의 경로까지 출력시켜 보았습니다.

 

반응형
저작자표시 비영리 (새창열림)

'Algorithm' 카테고리의 다른 글

[세그먼트 트리] 구간합 구하기 / 원소 변경에서 시간복잡도를 줄이자!  (0) 2022.07.29
내가 정리해본 코딩테스트 문제 유형  (0) 2022.06.30
'Algorithm' 카테고리의 다른 글
  • [세그먼트 트리] 구간합 구하기 / 원소 변경에서 시간복잡도를 줄이자!
  • 내가 정리해본 코딩테스트 문제 유형
Giken
Giken
𝐒𝐲𝐬𝐭𝐞𝐦.𝐨𝐮𝐭.𝐩𝐫𝐢𝐧𝐭𝐥𝐧("𝐇𝐞𝐥𝐥𝐨 𝐖𝐨𝐫𝐥𝐝!");
  • Giken
    개발자 기켄
    Giken
  • 전체
    오늘
    어제
    • 분류 전체보기 (148)
      • Programming Language (26)
        • C (3)
        • C++ (2)
        • Java (19)
      • Web (4)
      • Database (1)
        • SQL (5)
      • Spring (10)
      • PHP (7)
      • Linux (1)
      • Server (1)
      • Infra (3)
      • Algorithm (74)
        • 백준 (71)
        • 프로그래머스 (0)
      • 프로젝트 (2)
      • Etc (8)
      • 낙서 (5)
  • 블로그 메뉴

    • GitHub
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    DB
    프로그래머스
    백준
    9498
    윤년
    2753
    2588
    1330
    SQL
    C
    평년
    SQL고득점키트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Giken
[알고리즘][C++][DFS] 특정 수 만들기 (MicroSoft 인터뷰 문제)
상단으로

티스토리툴바