728x90
반응형
https://www.acmicpc.net/problem/10451
10451번: 순열 사이클
1부터 N까지 정수 N개로 이루어진 순열을 나타내는 방법은 여러 가지가 있다. 예를 들어, 8개의 수로 이루어진 순열 (3, 2, 7, 8, 1, 4, 5, 6)을 배열을 이용해 표현하면 \(\begin{pmatrix} 1 & 2 &3&4&5&6&7&8 \\ 3
www.acmicpc.net
문제 해결
- 재귀를 이용해 사이클을 조사하는 것이다.
- 사이클이 만들어 지는 것을 확인 했으면 다음 만들 수 있는 것을 확인하는데 사이클 만들어지는데 구성 된 숫자는 다음 사이클을 만들 때 구성 될 수 없으므로 visited를 이용해 이미 구성 되었는 지를 확인하도록 한다.
CODE
#include <iostream>
#include <cstring>
using namespace std;
int T;
int N;
int A[1001];
void cycle(bool visited[], int i);
int main() {
cin >> T;
for (int t = 0; t < T; t++) {
cin >> N;
for (int i = 1; i <= N; i++) {
cin >> A[i];
}
int ans = 0;
bool visited[1001] = { false };
for (int i = 1; i <= N; i++) {
if (not visited[i]) {
cycle(visited,i);
ans++;
}
}
cout << ans << "\n";
}
return 0;
}
void cycle(bool visited[], int i) {
visited[i] = true;
if (visited[A[i]] == false) {
cycle(visited, A[i]);
}
}
728x90
반응형
'알고리즘 > [C++] 백준 BOJ' 카테고리의 다른 글
[C++] 백준 2637 장난감 조립 (0) | 2023.10.24 |
---|---|
[C++] 백준 3059 등장하지 않는 문자의 합 (0) | 2023.10.15 |
[C++] 백준 14719 빗물 (0) | 2023.08.29 |
[C++] 백준 2671 잠수함식별 (0) | 2023.08.26 |
[C++] 백준 17071 숨바꼭질 5 (0) | 2023.08.12 |
댓글