들어가기 전
빨간 컵에 칠성사이다가 담겨져 있고 파란 컵에 스프라이트가 담겨져있다. 여기서 파란 컵에 칠성사이다를 넣고 빨간 컵에 스프라이트를 넣을려면 어떻게 해야 될까? 해답은 간단하다. 다른 컵(여기선 노란 컵이라 하겠다.)에 빨간 컵의 칠성사이다를 노란 컵에 붓고 빨간 컵이 비게 되면 파란 컵의 스프라이트를 빨간 컵에 붓고 파란 컵이 비게 되면 노란 컵에 담았던 칠성사이다를 파란 컵에 부으면 된다. 갑자기 노란 컵이 튀어나와서 쌩뚱맞다고 생각하는 사람이 있을 수 있겠지만 다른 컵을 쓰면 안된다고는 안했다. 알고리즘은 문제를 해결하기 위한 것이지 수수께끼나 넌센스 문제가 아니다.
이 이야기가 왜 나왔냐면 프로그래밍을 할 때 아래 소스 처럼 2개의 변수 값을 서로 바꿀 경우 변수 2개 가지고 끙끙 거리지 말고 간단하게 변수 하나 더 사용해서 쉽게 해결하면 되기 때문이다. 이제 제 3의 변수를 쓰지 않고 변수 2개의 값을 맞바꾸는 알고리즘을 생각해보자.
using System;
namespace 사이다컵바꾸기
{
class Program
{
static void Main(string[] args)
{
// 빨간 컵과 파란 컵에 칠성사이다와 스프라이트가 담겨져 있다.
string 빨간컵 = "칠성사이다";
string 파란컵 = "스프라이트";
Console.WriteLine("=====바꾸기 전=====");
Console.WriteLine("빨간컵 : {0}", 빨간컵);
Console.WriteLine("파란컵 : {0}", 파란컵);
// 새롭게 준비한 노란 컵
string 노란컵;
// 스프라이트를 빨간 컵에 붓기 위해 칠성사이다를 노란컵에 붓는다.
// 그 다음 파란 컵의 스프라이트를 빨간 컵에 붓는다.
// 그 다음 노란 컵에 임시로 담아둔 칠성 사이다를 파란 컵에 붓는다.
노란컵 = 빨간컵;
빨간컵 = 파란컵;
파란컵 = 노란컵;
Console.WriteLine("=====바꾼 후=====");
Console.WriteLine("빨간컵 : {0}", 빨간컵);
Console.WriteLine("파란컵 : {0}", 파란컵);
}
}
}