백준_10451번_순열 사이클
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
해당 문제의 경우 DFS문제이지만, 구현문제에 더 가깝다는 느낌을 받으며 풀었다.
처음에 문제 이해에 시간이 조금 걸린 부분이 있었으며, 해당 문제에서 말하는 순열 사이클은 배열의 인덱스와 해당 위치에 값을 가지고 핑퐁하며 반복되는 점이 몇개 인가 찾는 문제이다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int count;
static int n;
static int[] arr;
static boolean[] chk;
static int result;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
count = Integer.parseInt(st.nextToken());
for (int i = 0; i < count; i++) {
st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());
arr = new int[n+1];
chk = new boolean[n+1];
st = new StringTokenizer(br.readLine());
for (int j = 1; j < n+1; j++) {
arr[j]= Integer.parseInt(st.nextToken());
}
result = 0;
for (int j = 1; j < arr.length; j++) {
if(!chk[j]){
chk[j]=true;
int go = arr[j];
while (true){
if(chk[go]){
result++;
break;
}
chk[go]= true;
go = arr[go];
}
}
}
System.out.println(result);
}
}
}
'CodingTest' 카테고리의 다른 글
백준_2468번_안전영역_자바 (0) | 2023.12.13 |
---|---|
백준_2667번_단지번호붙이기(자바) (0) | 2023.12.10 |
백준_2178번_미로탐색(자바) (1) | 2023.12.08 |
섬나라(BFS/DFS 기본 로직)_자바 (2) | 2023.12.06 |
백준_1926번_그림_BFS_자바 (0) | 2023.11.20 |