[백준 10813] 공 바꾸기 (C#, C++) - soo:bak
작성일 :
문제 링크
설명
주어진 순서대로 공을 교환한 뒤, 각 바구니에 최종적으로 들어 있는 공의 번호를 출력하는 문제입니다.
총 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;
}