일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 세그먼트 트리
- DP
- 분할 정복
- 가끔은_말로
- 알고리즘
- back propagation
- pytorch
- BFS
- 문자열
- tensorflow
- NEXT
- object detection
- 크루스칼
- 자바스크립트
- 이분 탐색
- dropout
- 다익스트라
- 백트래킹
- 우선 순위 큐
- 2023
- lazy propagation
- dfs
- c++
- 미래는_현재와_과거로
- 회고록
- 가끔은 말로
- 조합론
- 너비 우선 탐색
- 플로이드 와샬
- Overfitting
Archives
- Today
- Total
Doby's Lab
백준 2358번: 평행선 (C++) 본문
https://www.acmicpc.net/problem/2358
2358번: 평행선
첫째 줄에 n(1 ≤ n ≤ 100,000)이 주어진다. 다음 n개의 줄에는 각 점의 좌표가 주어진다. 만약 입력에 서로 같은 두 점이 주어지면, 그 두 점을 이용하여 직선을 만들 수 있다. 좌표는 절댓값이 231보
www.acmicpc.net
Solved By: Map
한 점을 여러 번 선택할 수 있기 때문에 예를 들어 x좌표가 같은 것이 2개 이상이라면 하나의 직선을 만들 수 있습니다.
즉, 점들을 모아서 중복되는 x값들이 2개 이상, 혹은 중복되는 y값들이 2개 이상이 확인된다면 하나의 직선으로 카운트합니다.
허나, 좌표의 절댓값이 2^31보다 작은 정수이므로 배열을 사용할 수 없습니다.
그러므로 map을 사용하여 문제를 풀 수 있습니다.
아직은 map의 활용도가 적습니다. 어떠한 key가 몇 개인지를 파악할 때, 사용하는 그 정도인 듯합니다.
#include <iostream>
#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 result = 0;
for(auto mi : mx){
if(mi.second >= 2) result++;
}
for(auto mi : my){
if(mi.second >= 2) result++;
}
cout << result;
return 0;
}
728x90
'PS > BOJ' 카테고리의 다른 글
백준 16946번: 벽 부수고 이동하기 4 (C++) (0) | 2022.05.30 |
---|---|
백준 1926번: 그림 (C++) (0) | 2022.05.29 |
백준 7575번: 바이러스 (C++) (0) | 2022.05.28 |
백준 1701번: Cubeditor (C++) (0) | 2022.05.28 |
백준 16172번: 나는 친구가 적다 (Large) (C++) (0) | 2022.05.26 |