문제링크 : https://www.acmicpc.net/problem/10819#include using namespace std;typedef long long ll;int n, max_n;int arr[8], perm[8];bool visited[8];void dfs(int idx){ if(idx==n) //최대값 계산 { int sum = 0; for(int i=0; i> n; for(int i=0; i> arr[i]; dfs(0); cout 백트래킹을 이용해 푸는 문제이다.먼저 처음 위치인 0부터 시작하여 최대 idx가 n에 도달할 때 해당 조합에 대한 차이 값을 계산하며 최대값도 비교해준다. 조합하는 과정은 방문 배열을 통해 현재 숫자가 선택..
#include #include using namespace std;int arr[101][101];int cal(int x1, int y1, int x2, int y2){ int min_num = arr[x1][y1]; int tmp = arr[x1][y1]; //시계 반대방향에서 끌어오기 for(int i=x1; ix1; i--) { arr[i][y2] = arr[i-1][y2]; min_num = min(min_num, arr[i][y2]); } for(int i=y2; i>y1; i--) { arr[x1][i] = arr[x1][i-1]; min_num = min(min_num, ..
#include using namespace std;typedef long long ll;int n;vectorv;void dfs(ll num){ if(num > 9876543210) return; v.push_back(num); for(int i=0; i i) { dfs(num*10+i); } }}int main(void){ ios_base::sync_with_stdio(false); cin.tie(0); cin >> n; for(int i=0; i 재귀를 통해 풀 수 있는 문제이다.처음에 기본 시작인 0~9까지를 dfs로 돌려준다.여기에 이어서 숫자를 하나씩 붙여주는데,num%10>i 조건문을 통해 숫자의 마지막 ..