PS/C++
실력이 좀 늘었다는걸 체감한 순간(백준 3009번)
siyamaki
2024. 6. 20. 09:58
https://www.acmicpc.net/problem/3009
네 번째 점이라는 브론즈 문제인데 직사각형을 이루는 3개의 점이 주어졌을 때 나머지 하나의 점을 찾는 문제다
본래라면 아래 코드처럼 좌표값을 각각 비교 해 나머지 점 하나를 찾는 생각을 했지만
#include <bits/stdc++.h>
#define FASTIO ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr)
using namespace std;
int main() {
FASTIO;
int x1, y1, x2, y2, x3, y3;
cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3;
int x4, y4;
if(x1 == x2) x4 = x3;
else if(x2 == x3) x4 = x1;
else x4 = x2;
if(y1 == y2) y4 = y3;
else if(y2 == y3) y4 = y1;
else y4 = y2;
cout << x4 << ' ' << y4;
}
한달 전 쯤 비트마스킹을 좀 공부했더니 갑자기 아래와 같은 아이디어가 떠오름
#include <bits/stdc++.h>
#define FASTIO ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr)
using namespace std;
int main() {
FASTIO;
int x1, y1, x2, y2, x3, y3;
cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3;
cout << (x1 ^ x2 ^ x3) << ' ' << (y1 ^ y2 ^ y3);
}
xor연산은 두 수가 같으면 0이 되는 성질을 이용했다
세 값을 xor 하면 결국 값이 같은 두 값은 0이 되고 0 ^ k = k이니 남은 값이 정답이 된다
갑자기 이런 아이디어가 떠올라서 신기했음