백준 웹사이트 "3009번 - 네 번째 점" 문제풀이입니다.
언어는 C언어입니다. (제출 언어: C99)
문제
소스 코드
#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 함수에 바로 작성해도 되지만, 이렇게 함수를 이용하면 코드가 훨씬 보기 좋아집니다!
반응형
'코딩 > 백준 BOJ' 카테고리의 다른 글
[백준/C언어] 3053번 - 택시 기하학 (0) | 2022.01.28 |
---|---|
[백준/C언어] 4153번 - 직각삼각형 (0) | 2022.01.27 |
[백준/C언어] 1085번 - 직사각형에서 탈출 (0) | 2022.01.26 |
[백준/C언어] 9020번 - 골드바흐의 추측 (0) | 2022.01.26 |
[백준/C언어] 4948번 - 베르트랑 공준 (0) | 2022.01.25 |