Notice
Recent Posts
Recent Comments
Link
«   2026/06   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Archives
Today
Total
관리 메뉴

dh-winternagi 님의 블로그

(10813) 공 바꾸기 본문

백준 (C++)/Solve

(10813) 공 바꾸기

dh-winternagi 2026. 4. 9. 20:55

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