반응형
https://www.acmicpc.net/problem/10813
풀이
#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 |