# 문제
https://www.acmicpc.net/problem/3009
# 풀이
- 직사각형이 되기 위해서는 각 점이 쌍을 이뤄야 한다.
- 예를 들어
(1, 1) (1, 10) (10, 1) 세 점이 주어졌을 때
x 좌표 1인 값이 2개
x 좌표 10인 값이 1개
y 좌표 1인 값이 2개
y 좌표 10인 값이 1개 - x 좌표 1과 y좌표 1은 각각 2개씩 한 쌍을 이루지만 10은 1개이다.
즉, 직사각형이 되기 위해 필요한 점은 (10, 10)이다. - 예제 입력 1을 보면
(30, 20) (10, 10) (10, 20)
x 좌표 10이 2개 (o)
x 좌표 30이 1개 (x)
y 좌표 20이 2개 (o)
y 좌표 10이 1개 (x)
=> (30, 10)이 정답이 된다.
# 구현
#include <stdio.h>
int main(void)
{
int x1, y1;
int x2, y2;
int x3, y3;
scanf("%d %d", &x1, &y1);
scanf("%d %d", &x2, &y2);
scanf("%d %d", &x3, &y3);
printf("%d %d", x1 ^ x2 ^ x3, y1 ^ y2 ^ y3);
return (0);
}
- ^ 연산자(XOR)를 이용해서 풀면 간단하다.
같으면 0, 다르면 1이 된다. - 10 ^ 10 ^ 30의 경우,
10과 10이 같으므로 0
0과 30이 다르므로 1이 되서 30이 남게 된다. - 비트 단위 연산을 하면 (1. -> 2. -> 3. 순서로 보면 된다.)
1.
0 0 0 0 1 0 1 0 (10)
0 0 0 0 1 0 1 0 (10)
0 0 0 1 1 1 1 0 (30)
2.
0 0 0 0 1 0 1 0 (10)
XOR 0 0 0 0 1 0 1 0 (10)
----------------------------
0 0 0 0 0 0 0 0 (0) => 두 수가 모두 같으므로 0이 된다.
3.
0 0 0 0 0 0 0 0 (0)
XOR 0 0 0 1 1 1 1 0 (30)
----------------------------
0 0 0 1 1 1 1 0 (30)
# 참고
c언어 코딩 도장: https://dojang.io/mod/page/view.php?id=173
'알고리즘 > 백준' 카테고리의 다른 글
99클럽 코테 스터디 1일차 TIL (1072번: 게임) (0) | 2024.10.28 |
---|---|
백준 30461: 낚시 (0) | 2024.04.27 |
1929번: 소수 구하기 (c언어) (0) | 2021.02.15 |
1989번: 소수찾기 (0) | 2021.02.14 |
1011번: Fly me to the Alpha Centauri (C언어) (0) | 2021.02.13 |
댓글