© 2025 anveloper.dev
GitHub·LinkedIn·Contact

목차

  • 문제
  • 입력
  • 출력
  • 예제
  • 풀이
  • 코드
  • 복잡도
풀이 목록으로 돌아가기

BOJ 10813 - 공 바꾸기

2024-01-14
BOJ
브론즈 II
java
원본 문제 보기
구현
시뮬레이션

문제

BOJ 10813 - 공 바꾸기

N개의 바구니에 1부터 N까지 공이 담겨 있을 때, M번의 교환을 수행한 결과를 출력하라.

입력

첫째 줄에 N과 M, 이후 M줄에 교환할 바구니 번호 쌍이 주어진다.

출력

1번부터 N번 바구니에 담긴 공 번호를 공백으로 구분하여 출력한다.

예제

입력출력
5 4 1 2 3 4 1 4 2 23 1 4 2 5

풀이

배열로 바구니를 표현하고, M번의 교환을 시뮬레이션한다.

  1. 크기 N+1 배열을 만들어 bucket[i] = i로 초기화한다
  2. M번 반복하며 두 바구니의 공을 swap한다
  3. 최종 배열 상태를 출력한다

핵심 아이디어: 배열 인덱스 교환(swap)으로 바구니 내용물 변경을 시뮬레이션한다.

코드

package day749;
 
import java.util.*;
import java.io.*;
 
public class Day712BOJ10813공바꾸기 {
  public static void main(String[] args) throws Exception {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    StringBuilder sb = new StringBuilder();
    StringTokenizer st;
 
    int N, M;
 
    st = new StringTokenizer(br.readLine());
 
    N = Integer.parseInt(st.nextToken());
    M = Integer.parseInt(st.nextToken());
 
    int[] bucket = new int[N + 1];
 
    for (int i = 1; i <= N; i++) {
      bucket[i] = i;
    }
 
    for (int i = 0; i < M; i++) {
      st = new StringTokenizer(br.readLine());
      int a = Integer.parseInt(st.nextToken());
      int b = Integer.parseInt(st.nextToken());
 
      int temp = bucket[a];
      bucket[a] = bucket[b];
      bucket[b] = temp;
    }
 
    for (int i = 1; i < N + 1; i++) {
      sb.append(bucket[i] + " ");
    }
    System.out.println(sb);
  }
}

복잡도

  • 시간: O(N + M) — 초기화 O(N) + 교환 O(M)
  • 공간: O(N) — 바구니 배열