dh-winternagi 님의 블로그
(10813) 공 바꾸기 본문
https://www.acmicpc.net/problem/10813
단계별로 풀어보기
4단계(1차원 배열) 6번째
a= a+b;
b= a-b;
a= a-b;
a^= b;
b^= a;
a^= b;
문제와 직접적인 관련은 없는 얘기지만, 내장 함수나 임시 변수 없이 위 두가지 방법을 이용해 두 변수를 교환할 수 있다.
하지만 전자는 오버플로우가 발생할 수 있고 후자는 정수 자료형에만 사용 가능하며, 결정적으로 두 방법 모두 a와 b의 메모리 주소값이 같으면 데이터가 사라지고 0이 되는 문제가 있다.
이젠 컴파일러도 많이 발전해서 임시 변수를 써도 알아서 최적화가 되고, 무엇보다 swap 함수는 C++11에서 <utility>헤더로 옮겨가 메이저 헤더만 있어도 잘 작동하는 경우가 많아 위 방법은 이론 정도만 알고 있으면 될 것 같다.

#include <iostream>
#include <vector>
using namespace std;
int main()
{
int n, m;
cin >> n >> m;
vector<int> v(n+1);
for(int x=1;x<=n;x++) v[x]= x;
while(m--){
int i, j;
cin >> i >> j;
if(i==j) continue;
v[i]^= v[j];
v[j]^= v[i];
v[i]^= v[j];
}
for(int x=1;x<=n;x++) cout << v[x] << " ";
return 0;
}'백준 (C++) > Solve' 카테고리의 다른 글
| (3052) 나머지 (0) | 2026.04.09 |
|---|---|
| (5597) 과제 안 내신 분..? (0) | 2026.04.09 |
| (10810) 공 넣기 (0) | 2026.04.09 |
| (2562) 최댓값 (0) | 2026.04.09 |
| (10818) 최소, 최대 (0) | 2026.04.09 |
