알고리즘 풀이

[백준]10813번: 공 바꾸기 - java 풀이

코디드 2023. 4. 11. 00:30

 

배열 + StringBuilder 풀이)

 

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

public class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		StringTokenizer st = new StringTokenizer(br.readLine(), " ");
		
		int N = Integer.parseInt(st.nextToken());
		int M = Integer.parseInt(st.nextToken());
		
		int[] arr = new int[N];
		for(int i=0; i<N; i++) {
			arr[i]=i+1;
		}
		
		StringBuilder sb = new StringBuilder();
		
		for(int idx=0; idx<M; idx++) {
			st = new StringTokenizer(br.readLine(), " ");
			
			int i = Integer.parseInt(st.nextToken());
			int j = Integer.parseInt(st.nextToken());
			
			int temp = arr[i-1];
			arr[i-1]=arr[j-1]; 
			arr[j-1]=temp; // 12345 21345 21435 31425
		}
		
		for(int result : arr) {
			sb.append(result+ " ");
		}
		
		System.out.println(sb);
	}
}

 

이전 문제와 비슷하면서도 살짝 다른 문제다.

두 개를 서로 교환하는데, 

 

			arr[i-1]=arr[j-1]; 
			arr[j-1]=arr[i-1];

 

이렇게 교환할 경우, arr[i-1]에 arr[j-1]이 초기화 됐기 때문에, arr[j-1]에 arr[i-1]을 초기화하는 것은 자기 자신을 초기화 하는것과 같다.  

 

			int temp = arr[i-1];
			arr[i-1]=arr[j-1]; 
			arr[j-1]=temp;

 

그러므로 arr[i-1]을 temp라는 변수에 초기화한 후에, arr[i-1]에 arr[j-1]을 초기화 해주고, arr[j-1]에 temp를 초기화 해주면, 두 수가 서로 자리를 바꾼 것이 된다.

 

이걸 생각 못해서 푸는데 한참 걸렸지만, 다른 블로그를 참고하지 않고 스스로 풀어낸걸로 위안을 삼아야겠다.