C++/기타

[C++] 좔가적인 λ³€μˆ˜ μ„ μ–Έ 없이 κ°’ κ΅ν™˜ν•˜κΈ° (swap)

Chan Lee 2023. 12. 19. 23:56

ν”„λ‘œκ·Έλž˜λ°μ„ ν•˜λ‹€ 보면 2개의 λ³€μˆ˜μ— λŒ€ν•΄μ„œ μ„œλ‘œμ˜ 값을 κ΅ν™˜ν•΄μ•Ό ν•˜λŠ” κ²½μš°κ°€ μžˆμŠ΅λ‹ˆλ‹€.

swap ν•¨μˆ˜λ₯Ό μ“°λ©΄ νŽΈν•˜μ§€λ§Œ, 직접 효과λ₯Ό κ΅¬ν˜„ν•΄μ•Ό ν•  λ•Œλ„ (ν˜Ήμ‹œ?) μžˆμ„ 것 μž…λ‹ˆλ‹€.

 

κ°€λ Ή a = 40, b = 30일 λ•Œ a = 30, b = 40으둜 λ§Œλ“œλŠ” κ²ƒμž…λ‹ˆλ‹€.

 

μ €λ§Œ κ·ΈλŸ°μ§€ λͺ¨λ₯΄κ³˜μ§€λ§Œ, 항상 보쑰 λ³€μˆ˜λ₯Ό μ„ μ–Έν•΄μ„œ 이 방법을 ν•΄κ²°ν–ˆμ—ˆμŠ΅λ‹ˆλ‹€.

int n 같은 λ³€μˆ˜μ— a λ‚˜ b 쀑 ν•˜λ‚˜λ₯Ό μ €μž₯ν•΄ 놓고, 순차적으둜 λ°”κΎΈλŠ” 것이죠.

 

int a {40};
int b {30};

int n {};

n = a;
a = b;
b = n;

cout << a << endl;	// 30
cout << b << endl;	// 40

이런 μ‹μœΌλ‘œμš”.

μ•„λ§ˆ μ΅μˆ™ν•˜μ‹€ 것 κ°™μŠ΅λ‹ˆλ‹€.

 

그런데 쓸데 μ—†λŠ” λ³€μˆ˜λ₯Ό λ§Œλ“€μ§€ μ•Šκ³  κ°€λŠ₯ν•œ κΈ°λ°œν•œ 방법을 μ°Ύμ•„μ„œ κΈ°λ‘ν•΄λ‘‘λ‹ˆλ‹€.

int n1{30};
int n2{40};

n1 = n1 + n2;       // n1 = 30 + 40 = 70
n2 = n1 - n2;       // n2 = 70 - 40 = 30
n1 = n1 - n2;       // n1 = 70 - 30 = 40

cout << n1 << endl; // 40
cout << n2 << endl; // 30

 

μ΄λ ‡κ²Œ ν•˜λ©΄ μ˜λ―Έμ—†λŠ” λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜μ§€ μ•Šκ³  해결이 λμŠ΅λ‹ˆλ‹€.

 

사싀 μ•„μ£Ό κ°„λ‹¨ν•œ 아이디어인데 이런게 μ‰½κ²Œ μƒκ°λ‚˜μ§€ μ•Šλ„€μš”..

이런게 λ°”λ‘œλ°”λ‘œ λ– μ˜€λ₯Έλ‹€λ©΄ μ°Έ 쒋을 것 κ°™μŠ΅λ‹ˆλ‹€.