문제
문제 이해
문제에 나와있는 예제 입력을 예시로 들어보자.
첫 번째 줄, 첫 번째에 주어진 N은 바구니의 개수이며 들어있는 공은 바구니와 같은 숫자를 가졌다고 한다.
N = 5 : 5개의 바구니에는 1 2 3 4 5 각 숫자가 적힌 공이 들어있는 것.
M = 4 : 4번에 거쳐 공을 교환한다는 의미이다.
1 2 : 1번 바구니에 들어있는 공과 2번 바구니에 들어있는 공을 바꾼다. 즉 2 1 3 4 5 가 되는 것.
3 4 : 같은 방법으로 공을 바꾸면 2 1 4 3 5
1 4 : 3 1 4 2 5
2 2 : 3 1 4 2 5 (최종 결과)
문제 해결
그럼 이를 어떻게 코드로 구현할까?
우선 이 문제 풀이의 핵심은 temp 사용이다.
알고리즘 처음 배울 때 두 변수 값을 바꾸기 예시로 꼭 나왔던 것 같은데.. ㅎㅎ
아무튼 temp는 임시 저장 공간이라고 생각하면 된다.
temp 의 원리는??
만약 A와 B를 바꾸고 싶다고 한다면, 아래와 같이 작성해주면 된다.
temp = A;
A = B;
B = temp;
그럼 위 문제에 temp를 어떻게 적용하면 될까?
for(int j = 0; j < M; j++) {
int I = in.nextInt();
int J = in.nextInt();
temp = arr[I-1];
arr[I-1] = arr[J-1];
arr[J-1] = temp;
}
- M (공 바꾸는 횟수) 만큼 I와J를 입력 받음
- 인덱스 번호는 바구니의 숫자보다 하나 작으니 입력 받은 바구니 숫자에 -1한 이후 서로 바꾸는 코드 작성.
최종 코드
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int N = in.nextInt();
int M = in.nextInt();
int array[] = new int[N];
int temp;
for(int i = 0; i < array.length; i++) {
array[i] = i + 1; //인덱스 번호와 바구니 수 맞추기 위해 +1
}
for (int j = 0; j < M; j++) {
int I = in.nextInt();
int J = in.nextInt();
temp = array[I-1];
array[I-1] = array[J-1];
array[J-1] = temp;
}
for (int k = 0; k < array.length; k++) {
System.out.print(array[k] + " " );
}
}
}
반응형
'백준 문제 풀이 > 1차원 배열' 카테고리의 다른 글
(#3052 Java) 나머지 (0) | 2023.08.09 |
---|---|
(#5597 Java) 과제 안 내신 분..? (0) | 2023.08.09 |
(#10810 Java) 공 넣기 (0) | 2023.08.04 |
(#2562 Java) 최댓값 (0) | 2023.08.03 |
(#10818 Java) 최소, 최대 (0) | 2023.08.03 |