![[C++] 자료구조의 기본 - swap](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbsabzd%2FbtsM67KgmYt%2FaOMcJJF7wR54bvEv3P0Wnk%2Fimg.png)

본 게시글은 '홍정모 연구소 Data Structure(Honglab.co.kr)' 강의 내용을 바탕으로 이해한 내용을 정리하였습니다.
1. Swap
Swap은 말그대로 교환을 의미한다. 우리가 양손에 바나나와 사과를 하나씩 들고 있었다고 생각해보자. 여기서 우리는 양손에 각 과일을 서로 다른 손으로 옮기고 싶다면 어떻게 해야할까?
책상 어딘가에 잠시 하나씩 옮겨두고 바꾸면 수월하지 않을까?
이 방법을 그대로 코드로 구현하면 swap 이 되는 것이다.
#include <iostream>
using namespace std;
int main()
{
{
int a = 8;
int b = 3;
cout << a << " " << b << endl;
// ????????
cout << a << " " << b << endl;
}
return 0;
}
이렇게 변수 a, b에 각 정수가 저장이 되어있다면, 각 저장된 수를 서로 바꾸고 싶을 때에는 어떻게 해야할지 생각해보자.
여기에도 잠시 올려둘 책상이 있으면 될 것이다. 그래서 우리는 임시로 잠시 넣어둘 변수를 만들면 우리가 원하는 결과값이 나올 것이다.
즉, a와 b를 출력했을 때 8과 3이 나왔다면 위 코드를 완성시켰을 때 a와 b는 3과 8이 나와야 할 것이다.
a = 8;
b = 3;
// 단순히 이렇게 값을 넣어주면 되는거 아닌가?
이 방법을 떠올렸다면 안타깝게도 정답이 아니다. 왜냐하면 단순히 변수에 8과 3을 넣어주는 것은 리터럴을 넣어준 것 뿐이다. 즉 값이 바뀐다면 이는 Swap이 일어날 수 없다.
우리는 한 상황에서만이 아닌 일반적인 여러 상황에서 똑같이 swap이 일어나도록 해야 한다. 패턴 인식, 코딩의 기본 아닌가(Computational Thinking 카테고리 게시글 참고)
그렇다면 비슷한 일련의 모든 상황에서 변수가 swap을 일어나도록 해보자.
#include <iostream>
using namespace std;
int main()
{
{
int a = 8;
int b = 3;
cout << a << " " << b << endl;
// 예시
int temp = a;
a = b;
b = temp;
cout << a << " " << b << endl;
}
}
return 0;
위 코드처럼 temp 라는 임시 변수를 만들어 잠시 책상에 올려둘 공간을 하나 만들어 주었다. 이로써 우리는 이러한 비슷한 패턴의 상황에서 swap 하나로 변수에 저장된 값을 서로 바꿀 수 있다.
// 직접 swap 함수를 만드는 경우
void mySwap(int& a, int& b) {
int temp = a;
a = b;
b = temp;
}
// algorithm 헤더를 사용하는 경우
#include <algorithm>
using namespace std;
int main() {
int a = 5, b = 3;
// STL의 swap 사용
swap(a, b); // 이렇게 바로 사용 가능하다
return 0;
}
이처럼 #include <algorithm>을 사용하면 처음처럼 swap이라는 함수를 직접 만들지 않아도 기본적으로 탑재된 STL의 기능을 사용할 수 있다.
int temp = a;
a = b;
b = temp;
물론 그 swap 함수에는 위 코드가 내재되어 있다. 우리는 똑같은 것을 만들어 본 것. 원리를 잘 이해하자.
'COMPUTER SCIENCE > Data Structure' 카테고리의 다른 글
[C++] 자료구조의 기본 - Sort (0) | 2025.04.03 |
---|---|
[Java, C++] Recursion(순환, 재귀) (0) | 2025.04.02 |
나의 성장 드라마
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!