본문 바로가기
알고리즘/백준

3009번: 네 번째 점 (c언어)

by Sondho 2021. 3. 12.

# 문제

https://www.acmicpc.net/problem/3009

 

3009번: 네 번째 점

세 점이 주어졌을 때, 축에 평행한 직사각형을 만들기 위해서 필요한 네 번째 점을 찾는 프로그램을 작성하시오.

www.acmicpc.net

 


 

# 풀이

  • 직사각형이 되기 위해서는 각 점이 쌍을 이뤄야 한다.
  • 예를 들어
    (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

 

'알고리즘 > 백준' 카테고리의 다른 글

백준 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
3190번: 뱀 (C언어)  (0) 2021.02.08

댓글