본문 바로가기

백준/C++

[Baekjoon/C++] 2358번 - 평행선

[백준] Baekjoon Online Judge

문제로 이동

 

문제

평면에 n개의 점이 있다. 그중 두 개 이상의 점을 지나면서 x축 또는 y축에 평행한 직선이 몇 개인지 알아내는 프로그램을 작성하시오.

 

입력

첫째 줄에 n(1 ≤ n ≤ 100,000)이 주어진다. 다음 n개의 줄에는 각 점의 좌표가 주어진다. 같은 좌표가 여러 번 주어질 수 있으며, 그런 경우 서로 다른 점으로 간주한다. 좌표는 절댓값이 231보다 작은 정수이다.

 

출력

첫째 줄에 답을 출력한다.

 


풀이

#include <iostream>
#include <unordered_map>
using namespace std;

unordered_map<int, int> x, y;

int main() {
	ios::sync_with_stdio(false);
	cin.tie(0);

	int n;
	cin >> n;

	while (n--) {
		int a, b;
		cin >> a >> b;

		x[a]++;
		y[b]++;
	}

	int cnt = 0;
	for (const auto& pair : x)
		cnt += (pair.second >= 2);

	for (const auto& pair : y)
		cnt += (pair.second >= 2);

	cout << cnt << '\n';

	return 0;
}

 점의 좌표가 같더라도 2개 이상의 점이 있다면 직선 하나를 그릴 수 있다고 가정하고 문제를 풀어야 한다.