-
실력이 좀 늘었다는걸 체감한 순간(백준 3009번)PS/C++ 2024. 6. 20.
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이니 남은 값이 정답이 된다
갑자기 이런 아이디어가 떠올라서 신기했음
'PS > C++' 카테고리의 다른 글
[백준 13544] 수열과 쿼리 3 (0) 2024.06.20 [백준 26146] 즉흥 여행 (0) 2024.06.20 [백준 1471] 사탕 돌리기 (0) 2024.06.20 [백준 28073] PSAT 특별과정 (0) 2024.06.20 [백준 7568] 덩치 (0) 2024.06.20