Juwan Park :: 루비에서 변수 값 스와핑하기

루비에서 변수 값 스와핑하기

★프로그래밍/Ruby :: 2016. 8. 16. 20:35

루비에서 두 변수의 값을 스와핑하는 방법입니다.

예를 들어, a에 2가 대입되어 있고 b에 3이 대입되어 있다고 했을 때 둘을 바꿔치기해서 a=3, b=2로 만드는 방법을 말합니다.

일단 a와 b를 스와핑하는 의사코드를 보겠습니다.

temp ← a
a ← b
b ← temp
a ← a Xor b
b ← a Xor b
a ← a Xor b
a, b ← b, a

흔히 사용되는 방법이 첫 번째 방법과 같은 임시변수 선언법이고 두 번째 방법과 같은 XOR 연산도 가끔 쓰이는데, 루비에서는 세 번째 방법대로 간편하게 스와핑을 구현할 수 있습니다.

다음 코드를 봅시다.

a, b = 2, 3                 # a에 2를, b에 3을 대입
puts sprintf("%s", [a, b])  # 출력
a, b = b, a                 # 스와핑
puts sprintf("%s", [a, b])  # 출력

이 코드의 실행 결과는 다음과 같습니다.

[2, 3]
[3, 2]

임시변수나 XOR 연산 없이도 간단하게 스와핑이 이루어졌습니다.

물론 이 방법은 배열 안에서도 가능합니다.

a = [2, 3]               # 배열 a에 2, 3 대입
puts sprintf("%s", a)    # 출력
a[0], a[1] = a[1], a[0]  # 스와핑
puts sprintf("%s", a)    # 출력

이 코드의 실행 결과는 다음과 같습니다.

[2, 3]
[3, 2]

뿐만 아니라 3개 이상의 변수에 대해서도 한꺼번에 스와핑이 가능합니다.

a, b, c = 2, 3, 5              # a, b, c에 2, 3, 5 대입
puts sprintf("%s", [a, b, c])  # 출력
a, b, c = c, a, b              # 스와핑
puts sprintf("%s", [a, b, c])  # 출력

이 코드의 실행 결과는 다음과 같습니다.

[2, 3, 5]
[5, 2, 3]

심지어는 각기 다른 자료형끼리도 스와핑이 가능합니다.

a, b, c, d = 2, "가", [3, 5], nil  # 각기 다른 자료형 대입
puts sprintf("%s", [a, b, c, d])   # 출력
a, b, c, d = d, c, b, a            # 스와핑
puts sprintf("%s", [a, b, c, d])   # 출력

이 코드의 실행 결과는 다음과 같습니다.

[2, "가", [3, 5], nil]
[nil, [3, 5], "가", 2]

자, 이제 루비에서 간단하게 변수 스와핑하는 방법을 이해하셨나요?

루비의 간편한 변수 스와핑은 매우 유용하게 쓰일 수 있습니다.

많은 도움 되셨기를 바랍니다.

(※참고로 파이썬에서도 이 방법의 스와핑이 가능합니다.)

Today    Yday    Tot
Juwan Park
Juwan Park's blog is powered by Daum and .
Contemporary Blue for .
Designed by Juwan Park. Creative Commons License
▲ TOP