본문 바로가기

코딩/백준 BOJ

[백준/C언어] 3009번 - 네 번째 점

백준 웹사이트 "3009번 - 네 번째 점" 문제풀이입니다.

언어는 C언어입니다. (제출 언어: C99)

 


문제

 

3009번: 네 번째 점

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

www.acmicpc.net


소스 코드

#include <stdio.h>

int diff_one(int n1, int n2, int n3);

int main(void){
    int x_arr[3];
    int y_arr[3];

    for(int i=0; i<3; i++){
        scanf("%d %d", &x_arr[i], &y_arr[i]);
    }
    int x = diff_one(x_arr[0], x_arr[1], x_arr[2]);
    int y = diff_one(y_arr[0], y_arr[1], y_arr[2]);
    printf("%d %d", x, y);
}

int diff_one(int n1, int n2, int n3){
    if(n1==n2)
        return n3;
    else{
        if(n1==n3)
            return n2;
        else
            return n1;
    }
}

문제 풀이

  좌표평면 위 직사각형의 특징은 네 꼭짓점의 x 좌표, y 좌표가 각각 두 가지씩 존재한다는 것입니다. 물론, 이는 '축에 평행한 직사각형'이라는 문제 조건이 있기에 생기는 특징입니다. 축에 평행하기에 세 점의 x 좌표 중 두 개가 같고 하나가 다르다면 남은 네 번째 점의 x 좌표는 다른 하나와 같습니다 (y 좌표도 마찬가지고요!). 예제처럼 세 점 (5, 5), (5, 7), (7, 5)이 주어진다면 나머지 네 번째 점의 x 좌표는 5, 5, 7 중에서 다른 하나인 7이 되고, y 좌표는 5, 7, 5 중에서 다른 하나인 7이 되어 (7, 7)이 됩니다.

  위와 같은 사실을 활용하기 위해, '세 정수가 주어지면 그 중에서 다른 하나를 반환하는 함수'인 'diff_one'을 작성합니다. main에서는 세 입력의 x 좌표, y 좌표를 배열에 따로 저장한 뒤, diff_one 함수를 통해 네 번째 점의 x, y 좌표를 유추합니다. 따로 함수를 작성하지 않고 main 함수에 바로 작성해도 되지만, 이렇게 함수를 이용하면 코드가 훨씬 보기 좋아집니다!

반응형