C++에서 두 숫자의 값을 서로 바꾸는(swap) 프로그램을 작성하는 방법은 크게 두 가지가 있습니다. 하나는 임시 변수(temp)를 사용하는 방법이고, 다른 하나는 세 번째 변수 없이 산술 연산만으로 교환하는 방법입니다. 이 글에서는 두 가지 방법을 예제 코드와 함께 자세히 살펴보겠습니다.
1. 임시 변수를 사용해 두 숫자 교환하기
가장 기본적이고 직관적인 방법은 세 번째 변수인 temp를 중간 저장소로 활용하는 것입니다.
예제 코드
#include <iostream>
using namespace std;
int main() {
int a = 10, b = 5, temp;
temp = a;
a = b;
b = temp;
cout<<"Value of a is "<<a<<endl;
cout<<"Value of b is "<<b;
return 0;
}
실행 결과
Value of a is 5 Value of b is 10
코드 설명
위 프로그램에는 두 숫자를 저장하는 변수 a와 b가 있으며, 교환 과정은 다음 순서로 진행됩니다.
- 변수 a의 값을 temp에 잠시 보관합니다.
- 변수 b의 값을 a에 저장합니다.
- temp에 보관해 둔 원래 a의 값을 b에 저장합니다.
이 세 단계를 거치면 a와 b의 값이 완전히 교환됩니다.
temp = a; a = b; b = temp;
마지막으로 cout을 통해 교환된 a와 b의 값을 화면에 출력합니다.
cout<<"Value of a is "<<a<<endl; cout<<"Value of b is "<<b;
2. 세 번째 변수 없이 두 숫자 교환하기
덧셈과 뺄셈 연산만으로도 변수를 교환할 수 있습니다. 별도의 임시 변수를 위한 메모리 공간이 필요 없다는 것이 이 방법의 장점입니다.
예제 코드
#include <iostream>
using namespace std;
int main() {
int a = 10, b = 5;
a = a+b;
b = a-b;
a = a-b;
cout<<"Value of a is "<<a<<endl;
cout<<"Value of b is "<<b;
return 0;
}
실행 결과
Value of a is 5 Value of b is 10
코드 설명
위 프로그램의 교환 로직은 다음과 같이 동작합니다.
a = a+b;→ a에 두 수의 합(15)이 저장됩니다.b = a-b;→ 합에서 b를 빼면 원래 a의 값(10)이 b에 저장됩니다.a = a-b;→ 합에서 새로운 b(원래 a)를 빼면 원래 b의 값(5)이 a에 저장됩니다.
이렇게 하면 임시 변수 없이도 a와 b의 값이 서로 교환되며, 이후 cout으로 결과를 출력합니다.
a = a+b; b = a-b; a = a-b;
주의할 점
산술 연산 방식은 간결하지만, 두 수의 합이 int 자료형의 표현 범위를 초과하면 오버플로우가 발생할 수 있다는 점을 유의해야 합니다. 매우 큰 값이나 음수가 섞인 연산에서는 임시 변수를 사용하는 첫 번째 방법이 더 안전합니다.
보너스: XOR 비트 연산으로 교환하기
정수형 변수라면 XOR(^) 연산자를 이용해 오버플로우 걱정 없이 교환할 수도 있습니다.
a ^= b; b ^= a; a ^= b;
다만 가독성이 떨어질 수 있으므로, 실무에서는 명확한 의미 전달을 위해 임시 변수 방식을 가장 널리 사용합니다.