슈뢰딩거의 고등어

[백준] 16936 나3곱2 본문

알고리즘

[백준] 16936 나3곱2

슈뢰딩거의 고등어 2022. 1. 20. 15:37

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

 

16936번: 나3곱2

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

www.acmicpc.net

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;
int N;

vector <long long> v;
bool visit[110];
vector <long long> choice;

void dfs(int cnt, int target) {
	if(cnt == target) {
		for(int i=0; i<choice.size(); i++) 	
            printf("%lld ", choice[i]);
        exit(0);
	}
	for(int i=0; i<v.size(); i++) {
		if(visit[i] == true) continue;
		
		if(choice.size() >= 1) {
			long long before = choice[cnt-1];
			long long cur = v[i];

			if(before * 2 != v[i] && (before % 3 != 0 || before /3 != v[i])){
				continue;
			}
		}
		
		visit[i] = true;
		choice.push_back(v[i]);
		dfs(cnt+1, target);
		choice.pop_back();
		visit[i] = false;
		
	}
}

int main() {
	scanf("%d", &N);

	for(int i=0; i<N; i++) {
		long long tmp;
		scanf("%lld", &tmp);
		v.push_back(tmp);
	}
	
	dfs(0, N);

}

생각만 잘하면 쉬운 문제였는데

문제를 제대로 읽지 않아서 계속 틀림...

10^ 18까지의 수를 커버해야 하기 때문에, long long 형을 사용해주어야 하고, 

나눌때, 나머지도 고려해주어야한다.

 

시간초과 때문에, 모든 next_permutaion () 을 사용할 수 없다.

dfs 로 구하면서, 조건에 맞지 않을 경우, 더 이상 탐색하지 않도록 가지치기가 필요하다.

#include <iostream>
#include <vector>
#include <algorithm>
// 시간초과
using namespace std;
int N;


int main() {
	scanf("%d", &N);

	vector <long long> v;
	for(int i=0; i<N; i++) {
		long long tmp;
		scanf("%lld", &tmp);
		v.push_back(tmp);
	}

	do {
		bool success = true;

		for(int i=1; i<N; i++) {
			long long before = v[i-1];
			long long cur = v[i];		
			if(before * 2 != v[i] && (before % 3 != 0 || before /3 != v[i])){
				success = false;
				break;
			}

		}

		if(success) {
			for(auto b: v)
				printf("%lld ", b);
			exit(0);
		}


	}while(next_permutation(v.begin(), v.end()));
	
}

'알고리즘' 카테고리의 다른 글

[백준] 16943 숫자재배치  (0) 2022.01.24
진수 변환  (0) 2022.01.20
[백준] 16924 십자가 찾기  (0) 2022.01.20
[백준] 16917 양념 반 후라이드 반  (0) 2022.01.19
[백준] 16968 차량번호판 (c++)  (0) 2022.01.19
Comments