#include <iostream>
using namespace std;
int main() {
int x1, x2, x3;
int y1, y2, y3;
scanf("%d %d %d %d %d %d", &x1, &y1, &x2, &y2, &x3, &y3);
if(x1 == x2)
printf("%d ", x3);
else if(x3 == x2)
printf("%d ", x1);
else
printf("%d ", x2);
if(y1 == y2)
printf("%d", y3);
else if(y3 == y2)
printf("%d", y1);
else
printf("%d", y2);
}
조건문으로 다른 거 하나 찾았다!
#include <iostream>
int main() {
int x1, x2, x3;
int y1, y2, y3;
scanf("%d %d %d %d %d %d", &x1, &y1, &x2, &y2, &x3, &y3);
printf("%d %d", x1 ^ x2 ^ x3, y1 ^ y2 ^ y3);
return 0;
}
이것도 더 간단한 방법이 있다! XOR을 이용하는 방법이다.
a ^ a = 0 같은 걸 XOR 연산하면 0이고, 0 ^ b = b 0과 어떤 수를 XOR 연산하면 b가 그대로 나온다!
그래서 a ^ a ^ b = b 다른 하나가 나온다.
이것도 처음에 바로 이해가 안 가서 진리표를 그려봤다. 이런 원리로 다른 하나를 구할 수 있다.
이 공식을 봤을 때 바로 생각난 건 개발자 개그였다. 전에 우연히 개발자 개그랍시고 개발자는 의자가 두 개 밖에 없어서 자리를 바꾸지 못한다는 글을 봤는데, 거기에 사람을 XOR 3번하면 된다는 댓글이 있었다. 원리는 모르겠고 그냥 웃었는데 이제는 바꿀 수 있을 것 같다.
#include <iostream>
int main() {
int h1 = 3, h2 = 4;
printf("%d %d", h1^h1^h2, h2^h2^h1);
return 0;
}
물론 사람은 정수형이 아니지만 처음 생각한 건 이거였다. 그런데 이건 그냥 printf(h2 h1) 과 다를게 없지 않나는 생각이 들었다.
그래서 이런 식으로 코드를 짜봤다. 이러면 진정한 의자 바꿈이 된다.
#include <iostream>
int main() {
int h1 = 3, h2 = 4;
h1 = h1 ^ h2;
h2 = h1 ^ h2;
h1 = h1 ^ h2;
printf("%d %d", h1, h2);
return 0;
}
바꿨다! 아 너무 재밌다.
'백준' 카테고리의 다른 글
시간복잡도와 공간복잡도 (0) | 2019.10.06 |
---|---|
14568 2017 연세대학교 프로그래밍 경시대회 (0) | 2019.10.05 |
2566 최댓값 (0) | 2019.10.04 |
2501 약수 구하기 (0) | 2019.10.04 |
2965 캥거루 세마리 (0) | 2019.10.04 |