본문 바로가기
PS 문제 풀이/Baekjoon

[BOJ] 백준 12101 1, 2, 3 더하기 2

by 까망 하르방 2021. 8. 10.
반응형

출처https://www.acmicpc.net/problem/12101

Approach

[BOJ] 9095 1, 2, 3 더하기와 다르게 

정수 N에 대해 1, 2, 3 합으로 이루어진 것을 찾는 문제이다.

 

[BOJ] 백준 9095 1, 2, 3 더하기

출처: https://www.acmicpc.net/problem/9095 Approach n이 크지 않아서 중복조합을 사용할 수 있지만 테스트 케이스 T가 주어지지 않아서 T의 크기에 따라서 결과가 다를 수 있습니다. DP 점화식을 이용한다. D

zoosso.tistory.com

 

오름차순으로 K번째 수식을 찾아야 하는데

DFS로 1→2→3 순으로 수식을 채워가면 오름차순 구성이 가능하다.

순열과 조합을 구하는 문제와 유사하다.  N과 M (4)

 

순열과 조합 (백준 N과 M 시리즈)

순열과 조합 순열(Permutation) / 조합(Combination)에서 개수를 구하는 경우에는 ▶ P(n, r) = n × (n - 1) × (n - 2) × ... × (n - r - 1) = n! / (n - r)! 상황에 따라서는 주어지는 Data가 나올 수..

zoosso.tistory.com

 

[BOJ] 백준 15652 N과 M(4)

출처: https://www.acmicpc.net/problem/15652  Input 4 2  Output 1 1 1 2 1 3 1 4 2 2 2 3 2 4 3 3 3 4 4 4 중복을 허용하는 조합 문제이다. 중복 없는 조합과 문제 [BOJ] 15650 N과 M (2)와 달리 기존의 선택..

zoosso.tistory.com

 

DFS 함수에 수식을 이루는 vector와 원소들의 합

- 원소들의 합이 N보타 크면 return

- K번째 수식을 찾은 경우 return


#include <iostream>
#include <vector>

using namespace std;

int N, K, cnt;
bool flag;

void DFS(vector<int>& v, int sum)
{
	if (sum > N) return;
	if (flag) return;
	if (sum == N)
	{
		cnt++;
		if (cnt == K)
		{
			for (int i = 0; i < v.size()-1; i++) 
			{
				printf("%d+", v[i]);
			}
			printf("%d\n", v[v.size()-1]);
			flag = true;
		}
		return;
	}
	for (int i = 1; i <= 3; i++) 
	{
		v.push_back(i);
		DFS(v, sum + i);
		v.pop_back(); 
	}
}

int main()
{
	// freopen("input.txt", "r", stdin);
	scanf("%d %d", &N, &K);
	vector<int> v;
	DFS(v, 0);
	if(!flag) printf("-1\n");
}
반응형

'PS 문제 풀이 > Baekjoon' 카테고리의 다른 글

[BOJ] 백준 1032 명령 프롬프트  (0) 2021.08.23
[BOJ] 백준 1026 보물  (0) 2021.08.22
[BOJ] 백준 9095 1, 2, 3 더하기  (0) 2021.08.09
[BOJ] 백준 1024 수열의 합  (0) 2021.08.07
[BOJ] 백준 1110 더하기 사이클  (0) 2021.08.06

댓글