알고리즘/백준

10813 - 공 바꾸기

leegeonwoo 2023. 8. 17. 20:40

이전 배열문제들과 똑같이 배열을 먼저 생성해준뒤, 각 바구니에 1~N까지 순서대로 공을 넣어놓고

변수 tmp를 통해 해당 바구니의 값을 바꿔준다.

	tmp = arr[a-1];
	arr[a-1] = arr[b-1];
	arr[b-1] = tmp;

위 코드가 가장 중요한 로직인데,

먼저 a,b에 -1을 해주는 이유는 문제에서 바구니는 1시작하지만 배열의 인덱스는 0부터 시작하기때문에 -1을 해주어 맞춰주는 것이다.

그리고 tmp변수를 사용하는이유는

arr[a-1] = arr[b-1]과 같이 b인덱스 값을 a인덱스 값으로 바로 넣어버리면 a인덱스 값이 가지고있는 값은 소멸되버리기때문에

tmp에 먼저 저장을 해둔뒤 b인덱스 값을 a로 옮기고 b에 tmp가 가지고있는 a값을 넣어주는 것이다.

package boj;

import java.util.Scanner;

public class b10813 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int N = sc.nextInt(); //바구니의 개수
		int M = sc.nextInt(); //공을 바꾸는 횟수 //반복할 횟수
		int[] arr = new int[N];
		for(int i=0; i<arr.length; i++) {
			arr[i] = i+1;
		}
		
		for(int i=0; i<M; i++) {
			int tmp;
			int a = sc.nextInt();
			int b = sc.nextInt();
			
			tmp = arr[a-1];
			arr[a-1] = arr[b-1];
			arr[b-1] = tmp;
		}
		
		for(int tmp : arr) {
			System.out.print(tmp + " ");
		}
	}

}
728x90