코딩테스트/백준

10451번 - 순열사이클 [JAVA]

애플쩀 2023. 7. 12. 17:03

 

package backjoon;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Tree1 {

	 public static void main(String[] args) throws IOException {
	      
		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
		int T=Integer.parseInt(br.readLine()); //테스트케이스 변수 
	
		
		
		for (int k = 0; k < T; k++) {
			int count=0; 
			int N=Integer.parseInt(br.readLine()); //배열갯수
			int arr[]=new int[N+1]; //인덱스를 1부터 시작하기 위함 
			boolean[] visited=new boolean[N+1]; //F로 초기화됨 
			StringTokenizer st=new StringTokenizer(br.readLine());
		for (int  i= 1; i < arr.length; i++) {
			arr[i]=Integer.parseInt(st.nextToken());
		}//for -배열에 저장
		
		for (int i = 1; i < arr.length; i++) {
			if(!visited[i]) {
				visited[i]=true;
				int next=arr[i];
				while(true) {
					if(visited[next]) {
						count++;
						break;
					}
					visited[next]=true;
					next=arr[next];
				}
			
			}//if
			
		}//for-i
			System.out.println(count);
		}//for-k
}//main
}//class

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

 

 

  • boolean 타입의 배열은 기본적으로 false로 초기화된다. 
  • StringTokenizer(a ,"b") -> b부분에는 구분할 구분자를 모두넣기!
  • BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
  • int arr[]=new int[N+1] 이렇게 쓰는 이유는 인덱스를 헷갈리지 않게 1부터 N+1까지 쓰는것을 위함