티스토리 뷰

728x90
반응형

백준 온라인 저지(BOJ) 10813번 공 바꾸기

https://www.acmicpc.net/problem/10813

 

10813번: 공 바꾸기

도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 매겨져 있다. 바구니에는 공이 1개씩 들어있고, 처음에는 바구니에 적혀있는 번호와 같은 번호가 적힌 공이

www.acmicpc.net

* 사용언어 : C언어, C++

 

1. 문제

N개의 바구니에 공이 1개 씩 들어있음 (바구니 번호와 같은 공)

M번 공을 바꾸는데, 2개를 골라서 두 바구니에 있는 공을 교환함

M번 공을 바꾼 후 각 바구니에 어떤 공이 있는지 출력

 

2. 풀이

10810번 공 넣기 문제를 활용한 2번째 문제인 것 같은데, 상대적으로 더 쉬운 것 같습니다.

10810번 문제의 풀이는 아래 링크를 참고하시면 됩니다.

https://rightbellboy.tistory.com/150

 

[백준/BOJ] 10810번 공 넣기 (C/C++)

백준 온라인 저지(BOJ) 10810번 공 넣기 https://www.acmicpc.net/problem/10810 * 사용언어 : C언어, C++ 1. 문제 N개의 바구니가 있고 각 바구니에는 1개의 공만 넣을 수 있음 N개의 바구니는 1번부터 N번까지 번

rightbellboy.tistory.com

 

처음에 각 바구니에 바구니 번호와 같은 번호의 공이 들어있기 때문에

초기화 작업을 하고 시작해야 합니다.

for (k = 1; k <= n; ++k) arr[k] = k;

 

그리고 공을 바꿀 때는 단순히 i 와 j 값을 바꾸면 안되고

실제 그 index 에 들어있는 값, 즉 arr[i] 과 arr[j] 를 바꿔주어야 합니다.

 

그 외에는 추가적인 설명 없이 코드로 풀이를 대체하겠습니다.

 

3. 코드

#ifndef _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
#endif

#include <cstdio>

const int LM = 101;
int arr[LM];

int main() {
#ifdef _WIN32
	freopen("input.txt", "r", stdin);
#endif // _WIN32
	int n, m, k;
	scanf("%d %d", &n, &m);

	for (k = 1; k <= n; ++k) arr[k] = k;
	
	int i, j, tmp;
	while (m--) {
		scanf("%d %d", &i, &j);
		tmp = arr[i];
		arr[i] = arr[j];
		arr[j] = tmp;
	}

	for (k = 1; k <= n; ++k) printf("%d ", arr[k]);
	return 0;
}

 

728x90
반응형
댓글