https://www.acmicpc.net/problem/10811
제가 작성한 풀이 위주로 작성했습니다.
순서 변경하는 알고리즘은 다음과 같이 작성했다.
tmp = basket[i];
basket[i] = basket[j];
basket[j] = tmp;
basket[i]에 바로 basket[j]의 값을 넣을 경우, basket[j]에 들어갈 값은 이미 잃은 상태이기 때문에 tmp라는 임의의 변수에 먼저 할당한 후, 마지막에 basket[j]에 basket[i]의 값이 들어간 tmp를 할당 받는다.
#include <iostream>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int N, M;
int i, j = 0;
int basket[101];
cin >> N >> M;
for (int k = 1; k <= N; k++)
basket[k] = k;
for (int k = 1; k <= M; k++) {
cin >> i >> j;
for (int l = j; l > i; l--) {
int tmp = basket[i];
basket[i] = basket[l];
basket[l] = tmp;
i++;
}
}
for (int k = 1; k <= N; k++)
cout << basket[k] << " ";
return 0;
}
- swap 함수 활용
스왑 알고리즘을 따로 작성하지 않고, 함수를 이용하는 방법도 있다. swap 함수는 C++ 표준 라이브러리에 제공하는 함수이며 void swap(T& a, T& b);의 형태로 이해된다. 인자로 받은 두 값을 교환할 수 있다. 따라서 swap을 이용하여 코드를 재구성하면 다음과 같다.
for (int k = 1; k <= M; k++) {
cin >> i >> j;
for (int l = i; l < j; l++) {
swap(basket[l], basket[j]);
j--;
}
}