View

반응형

네 번째 점

백준 3009 Bronze III 수학 · 비트 연산

문제 분석

  • 축에 평행한 직사각형의 꼭짓점 3개가 주어진다.
  • 나머지 네 번째 꼭짓점의 좌표를 찾아야 한다.
  • 직사각형이 축에 평행하므로, x좌표 2종류 × y좌표 2종류 = 4개의 꼭짓점이 존재한다.
  • 3개 중 한 번만 등장한 x값과 y값의 조합이 정답이다.

접근법

XOR(배타적 논리합) 성질을 이용하면 조건문 없이 풀 수 있다.

XOR 핵심 성질

  • a ^ a = 0 — 같은 값끼리 XOR하면 0
  • 0 ^ 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
반응형
Share Link
reply
«   2026/03   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31