※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 18511번 문제인 큰 수 구성하기이다.
문제는 아래 링크를 확인하자.

https://www.acmicpc.net/problem/18511 

 

18511번: 큰 수 구성하기

첫째 줄에 N, K의 원소의 개수가 공백을 기준으로 구분되어 자연수로 주어진다. (10 ≤ N ≤ 100,000,000, 1 ≤ K의 원소의 개수 ≤ 3) 둘째 줄에 K의 원소들이 공백을 기준으로 구분되어 주어진다. 각

www.acmicpc.net

0에서부터 시작해, 주어지는 K개의 수를 뒤에 하나씩 이어붙여나가보면서 N보다 작거나 같은 수들을 답의 후보로 정해나가자.

 

그 과정에서 N보다 큰 수가 등장한다면 그 방향의 검색을 중단하자.

 

이는 관점에 따라 백트래킹이 적용된 DFS로 생각할 수 있다.

 

아래는 제출한 소스코드이다.

#include <iostream>
using namespace std;
typedef long long ll;

ll N, K;
ll arr[3];
ll ans = 0;

void func(ll cur) {
	if (cur > N) return;
	ans = max(ans, cur);
	for (int i = 0; i < K; i++) {
		func(cur * 10 + arr[i]);
	}
}

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	cin >> N >> K;
	for (int i = 0; i < K; i++) cin >> arr[i];

	func(0);

	cout << ans;
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 4351 // C++] Hay Points  (0) 2022.06.05
[BOJ 5545 // C++] 최고의 피자  (0) 2022.06.05
[BOJ 5546 // C++] 파스타  (0) 2022.06.05
[BOJ 24929 // C++] Number Colosseum  (0) 2022.06.05
[BOJ 11400 // C++] 단절선  (0) 2022.06.04

+ Recent posts