※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 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 |