리뷰
https://www.acmicpc.net/problem/29197
원점에서 보이는 직선의 개수를 구하는 문제
전역 변수
- z : 기울기가 없는 직선을 저장할 해시맵
- one, two, three, four : 1 ~ 4사분면에 위치한 직선을 저장할 해시맵
- n : 학생의 수를 저장할 변수
함수
없음
문제풀이
- n을 입력 받고, n명의 학생의 좌표를 입력 받아 사분면을 구분하여 기울기를 각 해시맵에 저장한다.
- 모든 해시맵의 크기를 더해 출력한다.
트러블 슈팅
없음
참고 사항
- 원점에서 보는 것이기 때문에 각 사분면 마다 체크를 진행해 주어야 한다.
- 기울기가 없는 경우 divide zero에 유의하여야 한다.
정답 코드
#include<iostream>
#include<unordered_map>
using namespace std;
unordered_map<double, bool> z;
unordered_map<double, bool> one;
unordered_map<double, bool> two;
unordered_map<double, bool> three;
unordered_map<double, bool> four;
int n;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n;
while (n--) {
int x, y; cin >> x >> y;
if (!x && y < 0) z[-10001] = true;
else if (!x && y > 0) z[10001] = true;
else if (x < 0 && !y) z[-10002] = true;
else if (x > 0 && !y) z[10002] = true;
else {
if (x > 0 && y > 0) one[(double)x / y] = true;
if (x < 0 && y > 0) two[(double)x / y] = true;
if (x < 0 && y < 0) three[(double)x / y] = true;
if (x > 0 && y < 0) four[(double)x / y] = true;
}
}
cout << z.size() + one.size() + two.size() + three.size() + four.size();
}
728x90
'알고리즘 공부 > C++' 카테고리의 다른 글
[P2] 백준 15899번 트리와 색깔 C++ 세그먼트 트리, 오일러 경로 테크닉, 머지 소트 트리 (0) | 2025.02.27 |
---|---|
[G5] 백준 19940번 피자 오븐 C++ 너비 우선 탐색 (0) | 2025.02.26 |
[G5] 백준 15662번 톱니바퀴 (2) C++ 덱, 구현, 시뮬레이션 (0) | 2025.02.26 |
[S3] 백준 2149번 암호 해독 C++ 문자열, 정렬 (0) | 2025.02.26 |
[G4] 백준 14267번 회사 문화 1 C++ 세그먼트 트리, 느리게 갱신되는 세그먼트 트리, 오일러 경로 테크닉 (0) | 2025.02.26 |