View
반응형
네 번째 점
백준 3009 Bronze III 수학 · 비트 연산
문제 분석
- 축에 평행한 직사각형의 꼭짓점 3개가 주어진다.
- 나머지 네 번째 꼭짓점의 좌표를 찾아야 한다.
- 직사각형이 축에 평행하므로, x좌표 2종류 × y좌표 2종류 = 4개의 꼭짓점이 존재한다.
- 3개 중 한 번만 등장한 x값과 y값의 조합이 정답이다.
접근법
XOR(배타적 논리합) 성질을 이용하면 조건문 없이 풀 수 있다.
XOR 핵심 성질
a ^ a = 0— 같은 값끼리 XOR하면 00 ^ a = a— 0과 XOR하면 자기 자신
직사각형의 x좌표는 정확히 2개씩 짝을 이룬다. 3개만 주어졌으므로 하나는 짝이 없다.
세 x좌표를 모두 XOR하면 → 짝이 있는 값은 상쇄(a ^ a = 0), 짝이 없는 값만 남는다.
y좌표도 동일하게 처리하면 끝.
풀이 (Java)
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int x = 0, y = 0;
for (int i = 0; i < 3; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
x ^= Integer.parseInt(st.nextToken()); // x좌표 3개를 XOR
y ^= Integer.parseInt(st.nextToken()); // y좌표 3개를 XOR
}
// 짝이 있는 좌표는 상쇄 → 짝이 없는 좌표만 남음
System.out.println(x + " " + y);
}
}
예제 트레이스
[ 예제 1 ] 입력: (5,5) (5,7) (7,5)
x: 5 ^ 5 ^ 7 = 0 ^ 7 = 7 (5가 상쇄, 7 남음)
y: 5 ^ 7 ^ 5 = 0 ^ 7 = 7 (5가 상쇄, 7 남음)
→ 출력: 7 7 ✅
직사각형: (5,5)─(7,5)
│ │
(5,7)─(7,7) ← 정답
[ 예제 2 ] 입력: (30,20) (10,10) (10,20)
x: 30 ^ 10 ^ 10 = 30 ^ 0 = 30 (10이 상쇄, 30 남음)
y: 20 ^ 10 ^ 20 = 0 ^ 10 = 10 (20이 상쇄, 10 남음)
→ 출력: 30 10 ✅
시간 복잡도
O(1)
공간 복잡도
O(1)
클린 코드 — Java
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int x = 0, y = 0;
for (int i = 0; i < 3; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
x ^= Integer.parseInt(st.nextToken());
y ^= Integer.parseInt(st.nextToken());
}
System.out.println(x + " " + y);
}
}
728x90
반응형
'Problem Solving > Baekjoon' 카테고리의 다른 글
| [백준] 4179: 불! (Java) (0) | 2026.02.26 |
|---|---|
| [백준] 11729: 하노이 탑 이동 순서 — 재귀 풀이 (Java) (0) | 2026.02.25 |
| [백준] 25920: Yonsei Formula 1 (Java) (0) | 2026.02.24 |
| [백준] 1994: 등차수열 (Java) (0) | 2026.02.23 |
| [백준] 27849: Hungry Cow (Java) (0) | 2026.02.22 |
reply
