brunch

You can make anything
by writing

C.S.Lewis

by 미래지기 Aug 25. 2024

두 값을 맞바꾸기


/ | 빗금, 슬래시 | slash


a라는 변수에는 -5라는 값이 저장되어 있고, b라는 변수에는 2라는 값이 저장되어 있습니다.


a = -5

b = 2


이 두 개의 변수가 가지고 있는 값을 서로 교환하려면 (맞바꾸려면) 어떻게 해야 할까요?


아래와 같이 쓰면 될까요?


a = 2

b = -5


그렇습니다. 그렇게 하면 a와 b의 값을 서로 바꿀 수 있습니다. 실제로 첫 번째 코드와 두 번째 코드를 보면 값이 교환되었다는 것을 확인할 수 있으니까요.


a와 b의 값을 이미 알고 있기 때문에 그렇게 코드를 작성하면 됩니다.


그런데 말입니다...


애초에 a와 b의 값을 모른다면 어떻게 될까요?


a = -5


위의 코드를 통해서 우리는 a의 값이 -5라는 것을 알 수 있습니다. 그런데, a의 값이 어떤 것인지 구체적으로 알 수 없는 경우가 있습니다. 아래의 코드를 보세요.


a = x


이 코드는 "변수 x의 값을 변수 a에 저장하는" 코드입니다. 여기서 변수 x의 값을 우리는 알 수 없습니다. 숫자일 수도 있고 문자열일 수도 있습니다. 어떤 값인지는 알 수 없지만 변수 x의 값이 변수 a에 저장된다는 것만은 분명히 알 수 있습니다.


아래의 코드는 무슨 뜻일까요?


a = x

b = y


변수 a에 변수 x의 값을 저장하고, 그리고 변수 b에 변수 y의 값을 저장하는 코드입니다. x와 y의 값은 현재 알 수 없습니다.


그렇다면, x와 y의 값을 정해볼까요?


x = -5

y = 2


a = x

b = y


자, 위의 코드를 보면 변수 x의 값과 변수 y의 값이 구체적으로 무엇인지 알 수 있습니다. 그래서 변수 a의 값과 변수 b의 값이 무엇인지도 알 수 있습니다. 즉, 변수 a의 값은 -5가 되며, 변수 b의 값은 2가 됩니다.


확인해 볼까요? 화면에 값을 표시하면 확인이 되지요. 다음과 같이 코드를 짭니다.


x = -5

y = 2


a = x

b = y


print(a)

print(b)


위의 코드를 실행해 보세요. 예상대로 결과가 나왔지요?




a = x

b = y


위의 코드에서 a와 b의 값을 맞바꾸려면 어떻게 해야 될까요?


아래처럼 하면 될까요?


a = y

b = x


그렇습니다. 잘하셨습니다.




한 가지 더 해보겠습니다. 다시, 변수 a와 변수 b가 있습니다.


a

b


각 변수에는 (구체적으로 알 수는 없지만) 각각 어떤 값이 저장되어 있습니다. 이 두 변수가 가지고 있는 각각의 값을 서로 교환하려면 어떻게 해야 할까요?


값을 서로 교환한다는 것은, a값이 b에 저장되어야 하고, 또 동시에 b의 값이 a에 저장되어야 한다는 의미입니다. 그럼, 아래처럼 코드를 작성하면 될까요?


a = b

b = a


아닙니다. 위의 코드를 print 명령어를 써서 실행해 보면 알 수 있습니다. a와 b는 같은 값을 가지게 됩니다. 서로 교환된 것이 아닙니다.


왜 그럴까요?


코드를 자세히 살펴보면 알 수 있습니다.


먼저 "a = b" 가 실행되면 b의 값을 a에 저장하게 됩니다. 그렇게 되면 원래 a가 가지고 있는 값이 b의 값으로 바뀌게 된다는 뜻입니다. 원래 a가 가지고 있는 값이 없어지는 것이지요. 그래서 두 번째 코드 "b = a"를 실행하면 a의 바뀐 값이 b에 저장됩니다. a의 원래 값이 아닌!


이 문제를 어떻게 해결하면 될까요?


변수 하나를 더 써서 바뀌기 전의 값을 저장해 놓으면 됩니다. 아래 코드처럼요.


c = a

a = b

b = c


첫 줄 "c = a"는 이런 뜻입니다. a의 값이 곧 b의 값으로 바뀔 거니까 바뀌기 전에 다른 변수 c를 하나 마련하여 a의 값을 저장해 둡니다.


둘째 줄 "a = b"는 이런 뜻입니다. 이제 안심하고 b의 값을 a에 저장합니다. a의 값은 c에 저장해 놓았으니까요. (절반이 교환되었습니다.)


셋째 줄 "b = c"는 이런 뜻입니다. b에 c의 값을 저장합니다. c에는 a가 원래 가지고 있던 그 값이 저장되어 있습니다. (나머지 절반이 교환되었습니다.)


어려운가요? 이 과정을 그림으로 그려본다면 보다 쉽게 이해가 될 것입니다. 한 손에는 책을 들고 또 다른 손에는 우산을 들고 있었는데, 비가 와서 우산을 펼쳐야 합니다. 그런데 한 손으로는 우산을 펼 수가 없으니까 책을 잠시 옆 사람에게 맡겨 놓고 우산을 편 다음, 맡겨놨던 책을 다시 돌려받는 것과 비슷한 과정입니다.


아래 코드를 실행해 보세요. 이해가 될 것입니다.


a = -10

b = 2


print('교환 전')

print('a =', a)

print('b =', b)


c = a

a = b

b = c


print('교환 후')

print('a =', a)

print('b =', b)


변수는...

값을 저장하는 '저장소'입니다.


▨ 미래지기

이전 11화 문자열을 변수에 저장하기
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari