C 프로그래밍에서는 세 번째 변수(임시 변수)를 사용하지 않고도 덧셈과 뺄셈 연산만으로 두 숫자의 값을 서로 교환(swap)할 수 있습니다. 이 방법은 메모리 사용을 줄이고, 알고리즘의 논리적 사고력을 기르는 데에도 도움이 됩니다.
알고리즘
덧셈과 뺄셈을 이용한 교환 알고리즘은 다음과 같습니다.
START
Step 1: 두 개의 변수 x와 y를 선언한다.
Step 2: 키보드로부터 두 숫자를 입력받는다.
Step 3: 아래 연산을 적용하여 두 숫자를 교환한다.
i. x = x + y
ii. y = x - y
iii.x = x - y
Step 4: x와 y의 값을 출력한다.프로그램
다음은 임시 변수 없이 두 숫자를 교환하는 과정을 보여주는 C 프로그램입니다.
#include<stdio.h>
int main(){
int x,y;
printf("enter x and y values:");
scanf("%d%d",&x,&y); // 예: x=20, y=30 입력
x=x+y; // x = 20+30 = 50
y=x-y; // y = 50-30 = 20
x=x-y; // x = 50-20 = 30
printf("After swap x=%d and y=%d",x,y);
return 0;
}실행 결과
위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.
enter x and y values:20 30 After swap x=30 and y=20
동작 원리 이해하기
x=20, y=30일 때 각 단계별로 값이 어떻게 변하는지 살펴보면 다음과 같습니다.
- x = x + y → x에는 두 수의 합인 50이 저장됩니다.
- y = x - y → 50에서 원래 y값(30)을 빼면 원래 x값인 20이 y에 저장됩니다.
- x = x - y → 50에서 새로 저장된 y값(20)을 빼면 원래 y값인 30이 x에 저장됩니다.
이렇게 하여 두 변수의 값이 서로 교환됩니다.
곱셈과 나눗셈을 이용한 방법
참고: 임시 변수 없이 두 숫자를 교환하는 방법은 곱셈과 나눗셈 연산 또는 비트 단위 XOR 연산자를 사용해서도 가능합니다.
다음은 곱셈과 나눗셈 연산자를 활용하여 두 숫자를 교환하는 또 다른 예제입니다.
프로그램
#include<stdio.h>
int main(){
int x,y;
printf("enter x and y values:");
scanf("%d%d",&x,&y);
x=x*y;
y=x/y;
x=x/y;
printf("After swap x=%d and y=%d",x,y);
return 0;
}실행 결과
위 프로그램을 실행하면 다음과 같은 결과를 얻을 수 있습니다.
enter x and y values:120 250 After swap x=250 and y=120
주의 사항
곱셈과 나눗셈을 이용한 방법은 한쪽 값이 0일 경우 나눗셈 오류(0으로 나누기)가 발생할 수 있으므로 주의해야 합니다. 반면 덧셈과 뺄셈을 이용한 방법은 0이 포함되어도 안전하게 동작하며, 매우 큰 수를 다룰 때는 오버플로우 가능성만 염두에 두면 됩니다. 실무에서는 이러한 특성을 고려하여 상황에 맞는 방법을 선택하는 것이 좋습니다.