언어

변수 스왑

AlgoPoolJa 2021. 1. 13. 15:27

두 변수를 바꾸는 가장 널리 알려진 방법은 임시 변수를 놓고 이를 활용하는 방법이다.

 

temp = a

a = b

b= temp

 

이 방식은 거의 모든 언어에서 활용할 수 있는 기본적인 방식이지만 파이썬은 임시 변수 없이 변수를 스왑할 수 있다.

[Python]

a : int = 3

b : int = 5

a, b = b, a 

 

다중 할당이라고 불리는 이방식은 파이썬에서 지원하는 매우 강력한 기능이다.

그렇다면 가독성과 더불어 코드의 양까지 줄일 수 있지만 속도 면에서는 어떨까? 맥북에서 실험결과 2개의 방식은 속도차이가 거의 없다는 것을 알 수 있었다. 

 

그렇다면 다른 언어들은 어떨까?

 

[C++]

 

int a = 3;

int b = 5;

 

std::swap(a,b);

 

리턴값 없이 a와 b의 값을 바꿔주는  swap 함수가 있다. 

 

[Java]

 

int temp = 0;

int a = 1;

int b = 2;

temp = a

a = b

b = temp

 

Java는 이런 함수가 없어서 임시 변수를 써줘야 한다.

 

임시변수 없이 공간 복잡도를 필요로 하지 않는 풀이(단, 변수가 숫자형일때 한정):

ex) x = 13, y =5

x += y # x = 18, y = 5

y = x-y # y = 13

x -= y # x = 5