반응형
https://www.acmicpc.net/problem/16936
조건에 맞는 수열을 만들어내고, n개의 수열이 만들어지면 출력 후에 종료시켜줬습니다.
자꾸 시간초과가 나는 이유를 몰랐는데, 수의 범위를 간과하고 있었네요. long long int로 바꿔주니 해결되었습니다.
#include <iostream>
int n;
long long int arr[100];
bool visit[100] = { false };
long long int a[100];
void dfs(long long int c) {
if (c == n) {
for (int i = 0; i < n; i++)
printf("%lld ", a[i]);
exit(0);
}
for (int i = 0; i < n; i++) {
if (visit[i]) continue;
long long int j = a[c-1];
if (j % 3 == 0) {
j /= 3;
if (j != arr[i]) j = j * 6;
}
else j *= 2;
if (j != arr[i]) continue;
visit[i] = true;
a[c] = arr[i];
dfs(c + 1);
visit[i] = false;
}
}
int main() {
scanf("%d", &n);
for (int i = 0; i < n; i++) scanf("%lld", &arr[i]);
for (int i = 0; i < n; i++) {
if (visit[i]) continue;
visit[i] = true;
a[0] = arr[i];
dfs(1);
visit[i] = false;
}
}
반응형
'Algorithm' 카테고리의 다른 글
백준 2302 : 극장 좌석 (0) | 2021.11.11 |
---|---|
백준 17836 : 공주님을 구해라! (0) | 2021.11.11 |
백준 17070 : 파이프 옮기기 1 (0) | 2021.11.11 |
백준 16916 : 부분 문자열 (0) | 2021.11.11 |
백준 1644 : 소수의 연속합 (0) | 2021.11.11 |