⌨️CS-PS/백준_기하

[Baekjoon/백준][3009][C/C++] 네 번째 점

미르의 블로그 2023. 1. 30. 10:49
728x90
반응형
『목차』
0. 개요

1. 문제
2. 풀이
3. 코드

0. 개요

간단한 기하학문제. 서로 다른 2가지의 풀이로 문제를 풀어봤다.

1. 문제

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

 

3009번: 네 번째 점

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

www.acmicpc.net

[문제]

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

[입력]

세 점의 좌표가 한 줄에 하나씩 주어진다. 좌표는 1보다 크거나 같고, 1000보다 작거나 같은 정수이다.

[출력]

직사각형의 네 번째 점의 좌표를 출력한다.

[예제 입력 1]

5 5
5 7
7 5

[예제 출력 1]

7 7

[예제 입력 2]

30 20
10 10
10 20

[예제 출력 2]

30 10

2. 풀이

세 점이 주어졌을 때, x좌표ㆍy좌표 각각은 그 값이 2개씩 서로 같고, 나머지 하나의 좌표는 그 값이 다르다.

이때, 나머지 하나의 좌표에 해당하는 값이 네 번째 점에 해당하는 x좌표, y좌표이므로, 해당 점의 좌표를 출력하면 된다.

 

[풀이1]

단순 조건문 풀이.

 

[풀이2]

x좌표와 y좌표의 값에 따른 개수를 셀 수 있는 배열 count를 선언한 뒤, 좌표를 입력받아 각각의 개수를 센다. 이때, 배열의 값이 2이면 해당 값이 중복된다는 뜻이고, 배열의 값이 1이면 해당 값이 유일하다는 뜻이므로, 배열의 값이 1인 배열의 인덱스 값을 출력해주면 된다.

3. 코드

#pragma warning(disable:4996)
#include <stdio.h>

typedef struct {
	int x;
	int y;
}Point;

int main(int argc, char* argv[]) {
	Point pos[3];

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

	if (pos[0].x == pos[1].x)
		printf("%d ", pos[2].x);
	else if(pos[0].x == pos[2].x)
		printf("%d ", pos[1].x);
	else
		printf("%d ", pos[0].x);

	if (pos[0].y == pos[1].y)
		printf("%d", pos[2].y);
	else if (pos[0].y == pos[2].y)
		printf("%d", pos[1].y);
	else
		printf("%d", pos[0].y);

	return 0;
}
#pragma warning(disable:4996)
#include <stdio.h>

typedef struct {
	int x;
	int y;
}Point;

int main(int argc, char* argv[]) {
	Point pos;
	Point count[1001] = {};

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

	for (int i = 1; i <= 1000; i++)
		if (count[i].x == 1)
			printf("%d ", i);

	for (int i = 1; i <= 1000; i++)
		if (count[i].y == 1)
			printf("%d", i);
		
	return 0;
}
728x90
반응형