문제
엘리스 토끼는 목표량을 정해 수학 문제를 열심히 풉니다. 목표량은 정수입니다.
내일 풀 수학 문제의 개수는 오늘 푼 문제 개수의 수와 숫자의 구성이 같으면서, 오늘 푼 문제 개수의 수보다 큰 수 중 가장 작은 수입니다.
예를 들어, 오늘 67문제를 풀었으면 다음 날 76문제를 풉니다.
오늘 푼 문제의 개수를 줬을 때 다음날 풀 문제의 개수를 출력하는 프로그램을 작성하세요.
풀이: 백트래킹으로 숫자조합을 모든 경우의 수를 구해 값을 구한다
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
int arr[10] = {0,};
int num[10] = {0,};
int visit[10] = {0,};
int lens = 0;
int value;
int mins = 10000000;
void func(int k) {
if(k == lens) {
int sum = 0;
for(int i = 0; i < k; i++) {
sum += arr[i] * pow(10, i);
}
if(sum > value && mins > sum) {
mins = sum;
}
}
for(int i = 0; i < lens; i++){
if(visit[i]) continue;
visit[i] = 1;
arr[k] = num[i];
func(k+1);
visit[i] = 0;
}
}
int main() {
string str;
cin >> str;
value = stoi(str);
lens = str.length();
for(int i = 0; i < lens; i++) {
num[i] = str[i] - 48;
}
func(0);
cout << mins;
}
'개발 > 알고리즘' 카테고리의 다른 글
백준 15683번 감시 (골드 3) 백트래킹, 시뮬레이션 (0) | 2024.07.19 |
---|---|
백준 쿼드트리 흑백 압축 (1992 실버 1) 재귀 분할정복 (0) | 2024.07.12 |
백준 10971 (백트래킹 실버-2) (0) | 2024.07.06 |
14500 테트로미노 (2) | 2024.06.09 |
백준 1389 (실버 1) BFS, DFS 활용 (0) | 2024.05.10 |