문제 링크 : https://www.acmicpc.net/problem/10813
1. 요구 사항 이해
시간, 메모리 제한 : 1초 / 256 MB
N개의 바구니에 1부터 N까지 번호가 적힌 공을 넣고, M번의 교환 작업을 통해 바구니에 들어있는 공의 최종 상태를 출력하는 프로그램 작성.
- 1 ≤ N ≤ 100
- 1 ≤ M ≤ 100
- i번 바구니와 j번 바구니에 들어있는 공을 교환 1 ≤ i ≤ j ≤ N
2. 설계/검증
복잡도
시간 복잡도 | 최악의 경우 | 공간 복잡도 |
O(1) | O(N) |
배열 초기화: 배열 baskets를 초기화하는데 O(N) 시간이 걸립니다. 공 교환 작업: M개의 교환 작업 각각에 대해 O(1) 시간 복잡도가 필요하므로 총 O(M) 시간이 걸립니다. 전체 시간 복잡도는 O(N) + O(M)로, 여기서 N과 M 모두 100 이하의 상수이므로, 시간 복잡도는 O(1)
배열 저장: baskets 배열을 사용하므로 O(N) 공간이 필요합니다. 이 배열은 바구니 개수와 동일한 크기를 가지며, baskets 외에는 추가적인 메모리 사용이 없습니다. 공간 복잡도는 O(N)
3. 정상 코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// 입력을 위한 객체 생성
Scanner scan = new Scanner(System.in);
int N = scan.nextInt(); // 바구니의 개수
int M = scan.nextInt(); // 공 교환 횟수
// 유효성 검사
if (N < 1 || N > 100 || M < 1 || M > 100) {
System.out.println(" N (1 ≤ N ≤ 100), M (1 ≤ M ≤ 100)");
return;
}
// 바구니 번호를 저장할 배열 선언과 초기화
int[] nums = new int[N];
for (int i = 0; i < N; i++) {
nums[i] = i + 1;
}
// 공 교환
for (int x = 0; x < M; x++) {
int i = scan.nextInt();
int j = scan.nextInt();
// 유효성 검사
if (i < 1 || i > N || j < 1 || j > N || i > j) {
System.out.println("(1 ≤ i ≤ j ≤ N)");
return;
}
int temp = nums[i - 1];
nums[i - 1] = nums[j - 1];
nums[j - 1] = temp;
}
//결과 출력
for (int num : nums) {
System.out.print(num + " ");
}
scan.close();
}
}
'◖코딩 테스트◗▬▬▬▬▬▬▬▬▬ > 백준' 카테고리의 다른 글
[백준] ✔️3052 나머지 (설명/코드/정답) (0) | 2024.08.11 |
---|---|
[백준] ✔️5597 과제 안 내신 분..? (설명/코드/정답) (0) | 2024.08.11 |
[백준] 10810 공 넣기 (설명/코드/정답) (0) | 2024.08.11 |
[백준] 2562 최댓값(설명/코드/정답) (0) | 2024.08.11 |
[백준] 10818 최소, 최대 (설명/코드/정답) (0) | 2024.08.09 |