본문 바로가기

백준

2358 평행선

처음에 입력값 생각 안 하고 이중 for문으로 풀었다가 시간초과가 났다ㅋㅋㅋ

 

100,000개가 input으로 들어오므로 NlogN까지 가능함

 

그래서 map을 써서 구현했다.

 

x축 또는 y축에 평행한 직선은 x점이 같거나 y점이 같으면 되므로 mapx, mapy 두 개를 만들어서 각 점을 지나는 직선이 있다면 개수를 셌다. 

 

그다음에 map에 2 이상인 점의 개수를 세주었다. 끝!

 

map을 사용하다니 장하다.... 

 

#include <iostream>
#include <vector>
#include <algorithm>
#include <map>

using namespace std;

int main() {
    int n;
    cin >> n;
    
    map<int, int> mx;
    map<int, int> my;
    for (int i = 0; i < n; i++)
    {
        int x, y;
        cin >> x >> y;
        mx[x]++;
        my[y]++;
    }
    
    int cnt = 0;
    
    for (auto mi : mx)
    {
        //cout << mi.first << " " << mi.second << endl;
        if (mi.second >= 2)
            cnt++;
        
    }
    
    for (auto mi : my)
    {
        // cout << mi.first << " " << mi.second << endl;
        if (mi.second >= 2)
            cnt++;
    }
    
    cout << cnt << endl;
    
}

'백준' 카테고리의 다른 글

14442 벽 부수고 이동하기 2  (0) 2020.09.25
15739 매직스퀘어  (0) 2020.09.25
5060 무글 맵스 [미완]  (0) 2020.09.25
2206 벽 부수고 이동하기  (0) 2020.09.24
14699 관악산 등산  (0) 2020.09.24