JAVA - 백준 [BAEK JOON]/1차원 배열

[백준] 10813번 : 공 바꾸기 - JAVA (자바)

_ys2 2024. 6. 3. 23:40
728x90
반응형

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


문제

출처 - 백준 알고리즘


문제 이해

 

  • 첫 줄에 바구니의 개수 N과 교환 횟수 M이 주어집니다.
  • 두 번째 줄부터 M개의 줄에 걸쳐 각각 두 개의 정수 I와 J가 주어집니다. 이는 I번째 바구니와 J번째 바구니의 번호를 교환하라는 의미이다.

 


문제 풀이

import java.util.Scanner;

public class Main {   
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);    
        int N = sc.nextInt();   
        int[] arr = new int[N]; 
        int M = sc.nextInt();   
        int temp;   

        for (int i = 0; i < arr.length; i++) {  
            arr[i] = i + 1;
        }

            for (int j = 0; j < M; j++) {   
                int I = sc.nextInt();   
                int J = sc.nextInt();   

                temp = arr[I - 1];  
                arr[I - 1] = arr[J - 1];    
                arr[J - 1] = temp;  
        }
        for (int k = 0; k < arr.length; k++) {  
            System.out.print(arr[k] + " ");
        }
        sc.close(); 
    }

}

코드 풀이

Scanner sc = new Scanner(System.in);    // Scanner 객체 생성
int N = sc.nextInt();   // 입력받을 N, 바구니의 개수
int[] arr = new int[N]; // 바구니를 나타내는 배열
int M = sc.nextInt();   // 입력받을 M , 교환 횟수
int temp;   // 교환을 위한 임시 변수

 

for (int i = 0; i < arr.length; i++) {  // 배열 초기화, 각 바구니에는 1부터 N까지의 번호가 할당됨
    arr[i] = i + 1;
}

 

 for (int j = 0; j < M; j++) {   // M번의 교환을 수행하는 반복문
    int I = sc.nextInt();   // 첫 번째 바구니의 인덱스
    int J = sc.nextInt();   // 두 번째 바구니의 인덱스

    temp = arr[I - 1];  // 첫 번째 바구니의 값을 임시 변수에 저장
    arr[I - 1] = arr[J - 1];    // 두 번째 바구니의 값을 첫 번째 바구니에 대입
    arr[J - 1] = temp;  // 임시 변수에 저장된 값(첫 번째 바구니의 기존 값)을 두 번째 바구니에 대입
}

 

for (int k = 0; k < arr.length; k++) {  // 모든 교환이 완료된 후, 바구니 배열의 내용을 출력
    System.out.print(arr[k] + " ");
}
        sc.close(); // Scanner 객체 닫기
    }

}

 


피드백 & 정리

위 코드에서 arr [I]와 arr [J]로 접근하면 배열의 인덱스가 실제 바구니 번호보다 1 크기 때문에 범위 오류가 발생했다... 배열은 0부터 시작하는데, 바구니 번호는 1부터 시작하기 때문입니다.

 

// 실수: 잘못된 인덱스 계산
temp = arr[I];  
arr[I] = arr[J];    
arr[J] = temp;

 

// 인덱스를 1 감소시켜 올바른 위치
temp = arr[I - 1];  
arr[I - 1] = arr[J - 1];    
arr[J - 1] = temp;  
}

 

 

인덱스를 사용할 때 0 기반과 1 기반의 차이를 항상 주의해야 하고, 실수를 안 하기 위해 배열의 인덱스를 계산할 때 1을 빼는 것이 중요하다고 생각하고 실수하지 말자!

 

깃 허브

https://github.com/CHUNYOUNGSANG/Algorithm/blob/main/algorithm/src/baekjoon/java/one_dimensional_array_stage/No10813_ChangeTheBall.java

 

Algorithm/algorithm/src/baekjoon/java/one_dimensional_array_stage/No10813_ChangeTheBall.java at main · CHUNYOUNGSANG/Algorithm

알고리즘 공부방. Contribute to CHUNYOUNGSANG/Algorithm development by creating an account on GitHub.

github.com

 

 

반응형