반응형
https://www.acmicpc.net/problem/16936
16936번: 나3곱2
나3곱2 게임은 정수 하나를 이용한다. 가장 먼저, 정수 x로 시작하고, 연산을 N-1번 적용한다. 적용할 수 있는 연산은 두 가지 있고, 아래와 같다. 나3: x를 3으로 나눈다. x는 3으로 나누어 떨어져야
www.acmicpc.net
[ 문제풀이 ]
1. 수열을 입력받고, arr에 저장합니다.
2. 재귀함수를 이용하여 수열을 채워 나가는데, 이전 값에 2를 곱한 값이나 3을 나눈 값이 현재 수열의 값일 때만 수열에 넣어줍니다.
3. 모든 자리가 다 찬다면 그대로 출력해 줍니다.
[ 소스코드 ]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | #include<iostream> #define ll long long using namespace std; int N; ll arr[100]; ll ans[100]; int visited[100]; bool flag = false; void dfs(int level) { if (flag) return; if (level == N) { for (int i = 0; i < N; i++) { cout << ans[i] << ' '; } flag = true; } for (int i = 0; i < N; i++) { if (visited[i] == 0 && (ans[level-1] * 2 == arr[i] || (ans[level-1] % 3 == 0 && ans[level - 1] / 3 == arr[i]))) { visited[i] = 1; ans[level] = arr[i]; dfs(level + 1); visited[i] = 0; ans[level] = 0; } } } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> N; for (int i = 0; i < N; i++) { cin >> arr[i]; } for (int i = 0; i < N; i++) { visited[i] = 1; ans[0] = arr[i]; dfs(1); ans[0] = 0; visited[i] = 0; } } | cs |
반응형
'백준' 카테고리의 다른 글
[ 백준 ] 15918번 - 랭퍼든 수열쟁이야!! (C++) (0) | 2023.09.10 |
---|---|
[ 백준 ] 16940번 - BFS 스페셜 저지 (C++) (0) | 2023.09.09 |
[ 백준 ] 11567번 - 선진이의 겨울 왕국 (C++) (0) | 2023.09.07 |
[ 백준 ] 3184번 - 양 (C++) (0) | 2023.09.06 |
[ 백준 ] 3967번 - 매직 스타 (C++) (0) | 2023.09.05 |