본문 바로가기

Problem Solving/백준

[백준/C++] 2358번 평행선


뭔가 자세히 보다가 결국 x축과 평행한 선의 갯수와 y축과 평행한 선의 갯수를 찾으면 된다는 것을 알게되었다.

map에 key값으로 x좌표와 y좌표를 따로 넣고, 같은 key값으로 숫자가 1번 이상 들어가게 된다면 평행한 선의 조건을 충족하므로 map으로 구현하였다.

key값만 따로 보관하는 방법을 찾지 못해서 set에 key값을 저장해주었다.


#include <bits/stdc++.h>
using namespace std ;
set<int> points ;
map<int, int> x_axis, y_axis ;
int N, x, y, answer ;

int main()
{
    ios::sync_with_stdio(0), cin.tie(0) ;
    cin >> N ;
    for(int i = 0 ; i < N ; i++)
    {
        cin >> x >> y ;
        x_axis[x]++ ;
        y_axis[y]++ ;
        points.insert(x) ;
        points.insert(y) ;
    }

    for(set<int>::iterator i = points.begin() ; i != points.end() ; i++)
    {
        if(x_axis[*i] > 1) answer++ ;
        if(y_axis[*i] > 1) answer++ ;
    }


    cout << answer << '\n' ;
}

문제 링크: https://www.acmicpc.net/problem/2358

 

2358번: 평행선

첫째 줄에 n(1 ≤ n ≤ 100,000)이 주어진다. 다음 n개의 줄에는 각 점의 좌표가 주어진다. 만약 입력에 서로 같은 두 점이 주어지면, 그 두 점을 이용하여 직선을 만들 수 있다. 좌표는 절댓값이 231보

www.acmicpc.net