작성일 :

문제 링크

10813번 - 공 바꾸기

설명

주어진 순서대로 공을 교환한 뒤, 각 바구니에 최종적으로 들어 있는 공의 번호를 출력하는 문제입니다.

N개의 바구니에는 1부터 N까지 번호가 적힌 공이 하나씩 담겨 있으며,

M번에 걸쳐 두 바구니를 선택해 공의 위치를 서로 바꾸는 작업을 수행합니다.

모든 교환이 끝난 뒤, 각 바구니에 어떤 공이 담겨 있는지를 순서대로 출력합니다.


접근법

  • 먼저 1부터 N까지 번호가 적힌 공을 배열에 순서대로 담아 초기 상태를 구성합니다.
  • 이후 입력으로 주어지는 교환 명령을 하나씩 처리하며, 지정된 두 위치에 있는 공의 위치를 맞바꿉니다.
  • 모든 교환이 완료된 뒤, 배열에 담긴 공의 번호를 앞에서부터 순서대로 출력합니다.


Code

C#

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
using System;

class Program {
  static void Main() {
    var tokens = Console.ReadLine().Split();
    int n = int.Parse(tokens[0]), m = int.Parse(tokens[1]);
    int[] basket = new int[n];
    for (int i = 0; i < n; i++) basket[i] = i + 1;

    for (int k = 0; k < m; k++) {
      var op = Console.ReadLine().Split();
      int i = int.Parse(op[0]) - 1;
      int j = int.Parse(op[1]) - 1;
      (basket[i], basket[j]) = (basket[j], basket[i]);
    }

    Console.WriteLine(string.Join(" ", basket));
  }
}

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <bits/stdc++.h>

using namespace std;
typedef vector<int> vi;

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);

  int n, m; cin >> n >> m;
  vi basket(n);
  for (int i = 0; i < n; i++)
    basket[i] = i + 1;

  while (m--) {
    int i, j; cin >> i >> j;
    swap(basket[i - 1], basket[j - 1]);
  }

  for (int i = 0; i < n; i++)
    cout << basket[i] << (i < n - 1 ? " " : "\n");

  return 0;
}