반응형

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

 

16936번: 나3곱2

나3곱2 게임은 정수 하나를 이용한다. 가장 먼저, 정수 x로 시작하고, 연산을 N-1번 적용한다. 적용할 수 있는 연산은 두 가지 있고, 아래와 같다. 나3: x를 3으로 나눈다. x는 3으로 나누어 떨어져야

www.acmicpc.net

 

조건에 맞는 수열을 만들어내고, 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

+ Recent posts