Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C/C++, Python, PHP, Java에서 두 변수 값을 한 줄로 교환하는 방법


이 튜토리얼에서는 다양한 프로그래밍 언어에서 두 변수의 값을 서로 바꾸는 방법을 알아봅니다. 스왑(swap)이란 두 변수가 담고 있는 값을 서로 맞바꾸는 연산을 의미합니다. 먼저 간단한 예시로 살펴보겠습니다.

입력

a = 3 b = 5

출력

a = 5 b = 3

그럼 각 언어별로 하나씩 자세히 살펴보겠습니다.

Python(파이썬)

파이썬은 단 한 줄의 코드로 두 변수를 교환할 수 있습니다. 튜플 언패킹(tuple unpacking) 문법 덕분인데요, 별도의 임시 변수 없이 우변의 값들을 좌변에 한 번에 대입할 수 있습니다. 코드를 확인해 보겠습니다.

예제

# 변수 초기화
a, b = 3, 5
# 교환 전 출력
print("Before swapping:-", a, b)
# 변수 교환
a, b = b, a
# 교환 후 출력
print("After swapping:-", a, b)

실행 결과

위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.

Before swapping:- 3 5
After swapping:- 5 3

C/C++, PHP, Java와 같은 언어에는 파이썬과 같은 언패킹 문법이 없기 때문에, XOR(^) 비트 연산자를 활용하면 임시 변수 없이 간결하게 스왑을 구현할 수 있습니다. XOR 연산을 이용하면 한 줄의 코드로 교환 작업을 완료할 수 있습니다. 참고로 XOR 스왑은 정수형 변수에만 적용할 수 있습니다. 프로그램 작성 과정을 단계별로 정리하면 다음과 같습니다.

  • 두 변수를 서로 다른 값으로 초기화합니다.
  • 두 변수에 XOR 연산을 수행한 결과를 첫 번째 변수에 대입합니다.
  • 다시 XOR 연산을 수행한 결과를 두 번째 변수에 대입합니다.
  • 마지막으로 한 번 더 XOR 연산을 수행한 결과를 첫 번째 변수에 대입합니다.
  • 두 변수의 값이 서로 교환됩니다.

이제 각 언어별 코드를 살펴보겠습니다.

C/C++

C/C++에서는 콤마 연산자를 이용해 세 번의 XOR 연산을 한 줄로 나열할 수 있습니다.

예제

# include <stdio.h>
int main() {
    int a = 3, b = 5;
    printf("Before Swapping:- %d %d", a, b);
    (a ^= b), (b ^= a), (a ^= b);
    printf("After Swapping:- %d %d", a, b);
    return 0;
}

실행 결과

위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.

Before swapping:- 3 5
After swapping:- 5 3

Java

자바에서는 대입식을 식(expression) 안에 포함시키는 방식으로 a = a ^ b ^ (b = a);처럼 한 줄로 처리할 수 있습니다.

예제

class Swap {
    public static void main(String[] args) {
        int a = 3, b = 5;
        System.out.println("Before Swapping:- " + a + " " + b);
        a = a ^ b ^ (b = a);
        System.out.println("After Swapping:- " + a + " " + b);
    }
}

실행 결과

위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.

Before swapping:- 3 5
After swapping:- 5 3

PHP

PHP 역시 C 스타일의 XOR 할당 연산자(^=)를 지원하므로 동일한 원리로 구현할 수 있습니다.

예제

<?php
    $a = 5;
    $b = 10;
    echo "Before Swapping:- ", $a, " ", $b;
    ($a ^= $b);
    ($b ^= $a);
    ($a ^= $b);
    echo "\nAfter Swapping:- ", $a, " ", $b;
?>

실행 결과

위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.

Before Swapping:- 5 10
After Swapping:- 10 5

마무리

지금까지 네 가지 언어에서 두 변수를 한 줄로 교환하는 방법을 알아보았습니다. 파이썬에서는 튜플 언패킹을, C/C++·PHP·Java에서는 XOR 연산자를 활용하면 임시 변수 없이 깔끔하게 구현할 수 있습니다. 튜토리얼 내용에 대해 궁금한 점이 있다면 댓글로 남겨주세요.