※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 27260번 문제인 Красивые перестановки이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/27260
27260번: Красивые перестановки
Перестановкой размера $n$ называется массив $\langle a_1, a_2, \ldots, a_n \rangle$ различных чисел от $1$ до $n$. Каждое число в перестановке встречается ровно
www.acmicpc.net
1부터 N까지로 구성된 모든 순열에 대하여 인접한 두 원소의 곱의 합이 k의 배수인지를 확인하는 문제이다.
가능한 모든 순열을 생성하는 코드를 작성해 문제를 해결하자.
아래는 제출한 소스코드이다.
#include <iostream>
#include <vector>
using namespace std;
int N, K;
bool visited[11];
vector<int> vec;
int val, ans;
void func(int cnt) {
if (cnt == N) {
if (val % K == 0) ans++;
}
else {
for (int i = 1; i <= N; i++) {
if (visited[i]) continue;
val += vec.back() * i;
visited[i] = 1;
vec.emplace_back(i);
func(cnt + 1);
vec.pop_back();
visited[i] = 0;
val -= vec.back() * i;
}
}
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> N >> K;
for (int n = 1; n <= N; n++) {
visited[n] = 1;
vec.emplace_back(n);
func(1);
vec.pop_back();
visited[n] = 0;
}
cout << ans;
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 27258 // C++] Дроби (0) | 2023.01.24 |
---|---|
[BOJ 3135 // C++] 라디오 (0) | 2023.01.24 |
[BOJ 25376 // C++] 이상한 스위치 (0) | 2023.01.24 |
[BOJ 25374 // C++] 등급 계산하기 (0) | 2023.01.23 |
[BOJ 27268 // C++] Рамки (0) | 2023.01.23 |