일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
Tags
- PIR
- deep learning
- DFS
- deque
- 한화오션
- sort
- Neural Network
- 알고리즘 고득점 kit
- c++
- TensorFlow
- Queue
- Machine learning
- Programmers
- 큐
- Linear Regression
- 정렬
- 프로그래머스
- 모두를 위한 딥러닝
- SQL
- sung kim
- 백준
- ML
- mysql
- join
- 시간초과
- stl
- BOJ
- softmax
- 모두를 위한 머신러닝
- CSAP
Archives
- Today
- Total
hello, world!
[baekJoon1004] 어린 왕자 본문
https://www.acmicpc.net/problem/1004
1004번: 어린 왕자
입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트케이스에 대해 첫째 줄에 출발점 (x1, y1)과 도착점 (x2, y2)이 주어진다. 두 번째 줄에는 행성계의 개수 n이 주��
www.acmicpc.net
▷ pow()
헤더파일: <cmath>
함수 원형: double pow (double base, double n)
하는 일: base가 되는 숫자의 n제곱을 반환
pow(2.2, 2);
IDEA
[모든 경우]
1. 출발점과 도착점이 모두 원 내부에 있는 경우
2. 출발점은 내부에, 도착점은 외부에 있는 경우
3. 출발점은 외부에, 도착점은 내부에 있는 경우
4. 출발점과 도착점이 모두 원 외부에 있는 경우
위 경우 가운데 2, 3번의 경우에만 진입/이탈 횟수가 증가한다!
▷ "점이 원 내부에 있을 경우" 계산
점의 좌표: (x, y)
원의 좌표: (a, b)
원의 반지름: r
(x-a)^2 + (y-b)^2 <r^2
/*
날짜: 2020.08.05
번호: 1004
문제: 각 테스트 케이스에 대해 어린 왕자가 거쳐야 할 최소의 행성계 진입/이탈 횟수를 출력한다.
*/
#include <iostream>
#include <cmath> // pow()
using namespace std;
int main() {
int T; cin >> T; // # of test case
for (int i = 0; i < T; ++i) {
int x1, y1, x2, y2; // 출발좌표, 도착좌표
cin >> x1 >> y1 >> x2 >> y2;
int n; cin >> n; // 원 개수
int x, y, r; // 원 좌표, 반지름
int cnt = 0; // 진입/이탈 횟수
for (int j = 0; j < n; ++j) {
bool isSin = 0; // starting point가 원 내부에 있는지
bool isEin = 0; // end point가 원 내부에 있는지
cin >> x >> y >> r;
if (pow(x1 - x, 2) + pow(y1 - y, 2) < pow(r, 2)) {
isSin = 1;
}
if (pow(x2 - x, 2) + pow(y2 - y, 2) < pow(r, 2)) {
isEin = 1;
}
// 점 하나는 원 내부에 다른 하나는 외부에 있을 경우 진입/이탈 발생
if (isSin != isEin) {
cnt++;
}
}
cout << cnt << "\n";
}
}
Comments