BOJ

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

Sloth Coder 2022. 8. 25. 00:16

문제 출처: https://www.acmicpc.net/problem/3009

 

3009번: 네 번째 점

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

www.acmicpc.net

 

 

Sol)

#include <stdio.h>

int main(){

    int x[3];
    int y[3];
    int ans_x, ans_y;

    for(int i = 0; i < 3; i++){
        scanf("%d %d", &x[i], &y[i]);
    }

    for(int j = 0; j < 3; j++){
        if(x[j % 3] != x[(j + 1) % 3] && x[j % 3] != x[(j + 2) % 3])
            ans_x = x[j % 3];
        if(y[j % 3] != y[(j + 1) % 3] && y[j % 3] != y[(j + 2) % 3])
            ans_y = y[j % 3];
    }

    printf("%d %d\n", ans_x, ans_y);

    return 0;
}

 

  • 풀이 방향

직사각형을 완성시키기 위한 네 번째 점의 좌표를 구하는 문제이다. 직사각형의 x좌표와 y좌표는 각각 두종류 밖에 존재하지 않는다. 따라서 x좌표가 같은 점이 두 쌍, y좌표가 같은 점이 두 쌍 존재해야 한다. 총 세개의 점이 입력으로 주어지므로, 반드시 x좌표가 같은 점이 한 쌍, y좌표가 같은 점이 한 쌍 존재할 것이다. 입력된 x, y 값 중 쌍을 이루지 못한 x좌표와 y좌표의 값을 네 번째 점의 좌표로 결정하면 되겠다.

 

  • 풀이

굳이 x값과 y값을 묶어서 한 좌표 단위로 비교할 필요가 없다. 쌍을 이루지 못한 x값과 y값을 찾기만 하면 되므로 x, y 값을 저장할 크기 3짜리 배열을 만든다. x, y 배열 각각에서 혼자만 다른 값을 찾으면 된다. 이 부분을 else if문으로 일일이 모든 케이스를 비교해 처리해도 되나, 코드를 좀 덜 치고자 for문으로 구현했다. 모듈러 연산자를 사용하면 j값이 늘어나더라도 j, j+1, j+2의 값들은 항상 0, 1, 2 중 하나일 것이기 때문에 for문으로도 else if문으로 비교해야하는 모든 경우의 수를 비교해 볼 수 있다.

 

  • 문제에 대한 사견

세 입력 값중 혼자만 다른 값을 찾아 짝을 맞춰준다는 생각을 하는 것이 핵심이었다.