본문 바로가기
백준 문제 풀이/1차원 배열

(#10813 Java) 공 바꾸기

by _비니_ 2023. 8. 8.
문제

 

 

문제 이해

 

문제에 나와있는 예제 입력을 예시로 들어보자.

첫 번째 줄, 첫 번째에 주어진 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