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을 빼는 것이 중요하다고 생각하고 실수하지 말자!

깃 허브
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
반응형