IT 프로그래밍/백준

[C++] 백준 10813 공 바꾸기 풀이

기술1 2024. 3. 18. 11:28
반응형

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

 

10813번: 공 바꾸기

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

www.acmicpc.net

풀이


 

#include <iostream>
#include <vector>

using namespace std;
int main()
{
	int N, M;
	cin >> N;
	cin >> M;

	vector<int>data(N);

	for (int i = 0; i < N; i++)
	{
		data[i] = i + 1;
	}

	for (int i = 0; i < M; i++)
	{
		int j, k, tmp;
		cin >> j >> k;

		tmp = data[j - 1];
		data[j - 1] = data[k - 1];
		data[k - 1] = tmp;
	}
	

	for (int i = 0; i < N; i++)
	{
		cout << data[i] << " ";
	}

}

저 같은 경우는 vector로 배열을 구해줬지만 data[100]; 이런 식으로 배열을 구해줘도 상관은 없습니다.

 

1. 정수 N와 M을 각각 입력받습니다.

int N, M;
cin >> N;
cin >> M;

 

2. 바구니에 담을 배열을 입력합니다.

vector<int>data(N);

for (int i = 0; i < N; i++)
{
	data[i] = i + 1;
}

vector로 배열을 구해주었으며 배열은 0부터 시작하기 때문에 배열이 0에서 1을 가져야 한다고 고려를 해 i+1를 해주었습니다. 마찬가지로 1에선 2, 2에선 3을 가지면 됩니다. 

 

이게 나중에 가면 복잡해서 번거로울 수 있기 때문에 0의 값은 그냥 쓰레기값으로 둔 채 int i = 1부터 진행해서 i<=N을 해서 구해줘도 상관은 없습니다. 저는 풀다보니 이런 식으로 계산해서 푼 것입니다.

 

3. for문을 통해서 바꿀 바구니의 값을 입력받은 후 바꿔줍니다.

for (int i = 0; i < M; i++)
{
	int j, k, tmp;
	cin >> j >> k;

	tmp = data[j - 1];
	data[j - 1] = data[k - 1];
	data[k - 1] = tmp;
}

사실 여기서 보면 풀이가 조금 어지러울 수 있습니다. 제가 배열을 0에서 1값을 1에서  2값을 이런 식으로 먼저 정의를 해줬기 떄문에 J-1, K-1로 정의를 해주었습니다.

 

먼저 두 값을 서로 바꿔주기 위해서는 또 다른 하나의 변수가 필요합니다. 저는 그 변수를 tmp라고 했습니다.

 

저는 data[j-1]와 data[k-1]의 두개의 값을 교환을 하고 싶습니다. 그렇다면 먼저 data[j-1]의 값을 tmp에 복사를 한 후 data[j-1]에 data[k-1]를 덮어씌웁니다. 그 다음 data[k-1]에는 tmp에 받아놓은 data[j-1]을 덮어씌우면서 두 값은 변하게 되는 것입니다. 

 

 

4. 1번부터 N번까지의 바구니를 출력합니다.

for (int i = 0; i < N; i++)
{
	cout << data[i] << " ";
}

그 다음 배열 전부를 출력해주는 것을 for문을 이용해 해줍니다.

반응형

'IT 프로그래밍 > 백준' 카테고리의 다른 글

[C++] 3052 나머지  (0) 2024.03.19
[C++] 5597 과제 안 내신 분..?  (0) 2024.03.18
[C++] 백준 10810번 공넣기  (0) 2024.03.18
[C++] 백준 2562 최댓값  (0) 2024.03.16
[C++] 1546 평균  (0) 2024.03.16