Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++에서 두 숫자를 교환하는 두 가지 방법 – 임시 변수와 산술 연산 활용하기

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가 있으며, 교환 과정은 다음 순서로 진행됩니다.

  1. 변수 a의 값을 temp에 잠시 보관합니다.
  2. 변수 b의 값을 a에 저장합니다.
  3. 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

코드 설명

위 프로그램의 교환 로직은 다음과 같이 동작합니다.

  1. a = a+b; → a에 두 수의 합(15)이 저장됩니다.
  2. b = a-b; → 합에서 b를 빼면 원래 a의 값(10)이 b에 저장됩니다.
  3. 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;

다만 가독성이 떨어질 수 있으므로, 실무에서는 명확한 의미 전달을 위해 임시 변수 방식을 가장 널리 사용합니다.