본문 바로가기

백준 알고리즘

백준 [10813] 공 바꾸기 -자바 풀이

반응형

https://www.acmicpc.net/problem/10813

 

10813번: 공 바꾸기

도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 매겨져 있다. 바구니에는 공이 1개씩 들어있고, 처음에는 바구니에 적혀있는 번호와 같은 번호가 적힌 공이

www.acmicpc.net


 

 

 

N개의 수를 M번 반복하여 a,b의 수를 교환하는 문제이다.

 

우선 첫번째 줄에 N과 M을 입력받는다.

그리고 for문을 작성해서 배열 안에 1~N을 넣고 

tmp를 사용해서 a와 b의 순서를 바꾸면 된다.

 

if(a!=b) {
	arr[a] = b;
	arr[b] = a;
} else {
	arr[a] = a;
	arr[b] = b;
}

처음엔 tmp를 몰라서 이렇게 생각했으나 이러면
a=10, b=20일 때 2번줄에서 이미 a=20, b=20이 되어 꼬인다.
그래서 사용해야 하는 것이 tmp 개념이다.

 

이에 대한 설명은 아래 포스팅을 참고 바란다.

 

2023.05.16 - [JAVA] - JAVA 두 변수의 값 바꾸기 tmp

 

JAVA 두 변수의 값 바꾸기 tmp

int a = 10, int b = 20일 때 두 변수에 담긴 값을 서로 바꾸기 위해서는 어떻게 해야 하는가? tmp를 몰랐을 때 처음 시도했던 것은 if문이다. if (a!=b) { a = b; b = a; } 하지만, 생각해 보면 a = b; 를 실행하면

codingoffice.tistory.com

import java.util.Scanner;

public class Main {
	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];
		//배열을 만들고,배열 안에 1~N의 수를 차례로 넣는다. 
		for(int i=0; i<N; 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 i=0; i<N; i++) {
			System.out.print(arr[i] + " ");
		}		
	}
}

 

위와 같이 진행을 하면 되는데, 

 

int[] arr = new int[N];
//배열을 만들고,배열 안에 1~N의 수를 차례로 넣는다. 
for(int i=0; i<N; i++) {
	arr[i] = i+1;
}

정수로 이루어진 arr 배열을 만들고, for문을 활용하여  arr안에 1~N의 수를 넣는다.

 

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;
}

a, b 두 수를 입력받았을 때 a와 b의 위치를 바꿔야 하니

tmp에 arr[] 배열에 a-1번째 수를 저장하고,

arr[a-1]안에 arr[] 배열에서 b-1번째 수를 저장하고,

arr[b-1]안에 tmp값을 저장하면 결과적으로 arr[a-1]의 값과 arr[b-1]의 값이 서로 바뀐다.

 

for(int i=0; i<N; i++) {
System.out.print(arr[i] + " ");
}

마지막으로 for문을 사용해 arr[]의 배열을 나란히 출력하면 해결!

반응형