백준 - 3009번 네 번째 점(비트연산 XOR)

Kiwoong Park·2023년 7월 13일
0

문제

세 점이 주어졌을 때, 축에 평행한 직사각형을 만들기 위해서 필요한 네 번째 점을 찾는 프로그램을 작성하시오.

입력

세 점의 좌표가 한 줄에 하나씩 주어진다. 좌표는 1보다 크거나 같고, 1000보다 작거나 같은 정수이다.

출력

직사각형의 네 번째 점의 좌표를 출력한다.

C++ 풀이

두개의 같은 수와 다른 한가지 수를 비트 XOR 연산할 시 남은 다른 한 가지 수가 나오는 원리이다.
Ex. ((5 ^ 5) ^ 7) 일 경우
101 ^ 101 = 000
000 ^ 111 = 111 즉 7 이 된다.
이 비트연산은 순서에 관계가 없다
(7^5)^5 인 경우
111 ^ 101 = 010
010 ^ 101 = 111; 7이 된다.

즉, XOR은 세 수 이상의 연산에서 연산의 순서를 바꿔도 계산 결과가 같은 결합법칙(associative)이 성립한다는 것을 기억하자.

#include <iostream>
using namespace std;
int main(){
    int x1,x2,x3,y1,y2,y3;
    cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3;
    cout << ((x1^x2)^x3) << " " << ((y1^y2)^y3);
}

// 숏코딩 풀이
#import<iostream>
int a,b,c,d;main(){for(;std::cin>>a>>b;d^=b)c^=a;std::cout<<c<<' '<<d;}
profile
You matter, never give up

0개의 댓글