γλͺ©μ°¨γ
0. κ°μ
1. λ¬Έμ
2. νμ΄
3. μ½λ
0. κ°μ
ν°λ μ κ°μ₯ν, λ μμ μμΉκ΄κ³λ₯Ό 묻λ λ¬Έμ μ΄λ€. μ§λ¬Έμλ 4λͺ μ μΈλ¬Ό 'μ΄μμ, μ‘°κ·ν, λ°±μΉν, λ₯μ¬λͺ 'μ΄ λ±μ₯νλλ°, μ΄μμμ μλ¬΄λ° μν μ νμ§ μλλ€...(?!) μ‘°κ·νκ³Ό λ°±μΉνμ μμ μ€μ¬μ λνλ΄κ³ , λ₯μ¬λͺ κΉμ§μ 거리λ μμ λ°μ§λ¦μ λνλ΄λλ° λ§μ΄λ€. νμ°½ μμ μ 곡λΆν λ μμ μμΉκ΄κ³λ₯Ό λ μ¬λ¦¬λ©΄ λ¬Έμ λ μ½κ² νλ¦°λ€. μ λͺ¨λ₯΄κ² μΌλ©΄, λ μμ μμΉκ΄κ³μ λν΄ κ΅¬κΈλ§μ ν΄λ³΄μ. κΈ°μ΅μ΄ μλ‘μλ‘ λ κ²μ΄λ€.
1. λ¬Έμ
https://www.acmicpc.net/problem/1002
[λ¬Έμ ]
μ‘°κ·νκ³Ό λ°±μΉνμ ν°λ μ 근무νλ μ§μμ΄λ€. νμ§λ§ μλ μ‘΄μ¬κ°μ΄ μμ΄μ μΈκ΅¬μλ μ°¨μ§νμ§ μλλ€. λ€μμ μ‘°κ·νκ³Ό λ°±μΉνμ μ¬μ§μ΄λ€.
μ΄μμμ μ‘°κ·νκ³Ό λ°±μΉνμκ² μλνΈ λ§λ¦°(λ₯μ¬λͺ )μ μμΉλ₯Ό κ³μ°νλΌλ λͺ λ Ήμ λ΄λ Έλ€. μ‘°κ·νκ³Ό λ°±μΉνμ κ°κ° μμ μ ν°λ μμΉμμ νμ¬ μ κΉμ§μ 거리λ₯Ό κ³μ°νλ€.
μ‘°κ·νμ μ’ν (x1, y1)μ λ°±μΉνμ μ’ν (x2, y2)κ° μ£Όμ΄μ§κ³ , μ‘°κ·νμ΄ κ³μ°ν λ₯μ¬λͺ κ³Όμ 거리 r1κ³Ό λ°±μΉνμ΄ κ³μ°ν λ₯μ¬λͺ κ³Όμ 거리 r2κ° μ£Όμ΄μ‘μ λ, λ₯μ¬λͺ μ΄ μμ μ μλ μ’νμ μλ₯Ό μΆλ ₯νλ νλ‘κ·Έλ¨μ μμ±νμμ€.
[μ λ ₯]
첫째 μ€μ ν μ€νΈ μΌμ΄μ€μ κ°μ Tκ° μ£Όμ΄μ§λ€. κ° ν μ€νΈ μΌμ΄μ€λ λ€μκ³Ό κ°μ΄ μ΄λ£¨μ΄μ Έ μλ€.
ν μ€μ x1, y1, r1, x2, y2, r2κ° μ£Όμ΄μ§λ€. x1, y1, x2, y2λ -10,000λ³΄λ€ ν¬κ±°λ κ°κ³ , 10,000λ³΄λ€ μκ±°λ κ°μ μ μμ΄κ³ , r1, r2λ 10,000λ³΄λ€ μκ±°λ κ°μ μμ°μμ΄λ€.
[μΆλ ₯]
κ° ν μ€νΈ μΌμ΄μ€λ§λ€ λ₯μ¬λͺ μ΄ μμ μ μλ μμΉμ μλ₯Ό μΆλ ₯νλ€. λ§μ½ λ₯μ¬λͺ μ΄ μμ μ μλ μμΉμ κ°μκ° λ¬΄νλμΌ κ²½μ°μλ -1μ μΆλ ₯νλ€.
[μμ μ λ ₯ 1]
3
0 0 13 40 0 37
0 0 3 0 7 4
1 1 1 1 1 5
[μμ μΆλ ₯ 1]
2
1
0
2. νμ΄
[μ λ ₯κ°μ μ΄ν΄]
μ‘°κ·νκ³Ό λ°±μΉνμ μμΉλ μμ μ€μ¬μ λνλ΄κ³ , κ°κ°μμλΆν° λ₯μ¬λͺ κΉμ§μ 거리λ μμ λ°μ§λ¦μ λνλΈλ€.
∴ $x$, $y$λ μμ μ€μ¬μ’ν, $r$μ λ°μ§λ¦μ λν μ 보λ₯Ό λνλΈλ€.
$x_1$, $y_1$, $r_1$μ 첫λ²μ§Έ μμ λν μ 보μ΄κ³ , $x_2$, $y_2$, $r_2$μ λλ²μ§Έ μμ λν μ 보μ΄λ€.
[μΆλ ₯κ°μ μ΄ν΄]
λ₯μ¬λͺ μ΄ μμ μ μλ μμΉλ κ²°κ΅, μ‘°κ·νκ³Ό λ°±μΉνμ μμΉλ₯Ό μ€μ¬μΌλ‘ νλ λ μμ κ΅μ μ ν΄λΉνλ€.
∴ λ μμ μμΉκ΄κ³λ₯Ό ν΅ν΄ κ΅μ μ κ°μλ₯Ό νμ ν μ μκ³ , μ΄λ λ₯μ¬λͺ μ΄ μμ μ μλ μμΉμ κ°μμ ν΄λΉνλ€.
[λ μμ μμΉκ΄κ³μ λν μ΄ν΄]
λ μμ κ°κ° $O$, $O'$λΌ νκ³ , $O$μ λ°μ§λ¦μ $r$, $O'$μ λ°μ§λ¦μ $r'$, λ μμ μ€μ¬ μ¬μ΄μ 거리λ₯Ό $d$λΌ νμ.
μ΄λ, λ μμ΄ μΌμΉνλ κ²½μ°μλ§ κ΅μ μ μκ° λ¬΄νλκ° λλ€λ μ μ μ μνλλ‘ νμ.
μμΉκ΄κ³ | κ΅μ μ [λ°νκ°] |
μμ | κ·Έλ¦Ό |
1-1. λ μμ΄ μΌμΉνλ€. | 무νλ[-1] | - | - |
2-1. λ§λμ§ μλλ€_μΈλΆ | 0[0] | $r+r'<d$ | |
2-2. ν μ μμ λ§λλ€_μΈμ | 1[1] | $r+r'=d$ | |
2-3. λ μ μμ λ§λλ€ | 2[2] | $|r-r'|<d<r+r'$ | |
2-4. ν μ μμ λ§λλ€_λ΄μ | 1[1] | $d<|r'-r|$ | |
2-5. λ§λμ§ μλλ€_λ΄λΆ | 0[0] | $d<|r'-r|$ | |
2-6. λ§λμ§ μλλ€_λμ¬μ | 0[0] | $d=0$ |
μμμ μΈκΈν λ΄μ©λ€μ κ°μ§κ³ μ½λλ₯Ό ꡬμ±νλ©΄ μλμ κ°λ€.
3. μ½λ
#pragma warning(disable:4996) //visual studio scanf μ€λ₯ λ°©μ§.
#include <stdio.h>
#include <stdlib.h> //abs() ν¨μ μ¬μ© λͺ©μ .
#include <math.h> //μνν¨μ μ¬μ© λͺ©μ .
/* μ ꡬ쑰체 μ μΈ */
typedef struct {
int x;//xμ’ν
int y;//yμ’ν
int r;//λ°μ§λ¦
}Circle;
/* λ μμ μ€μ¬ μ¬μ΄ 거리 ꡬνλ ν¨μ */
double center_distance(Circle c1, Circle c2) {
return sqrt(pow(c1.x - c2.x, 2) + pow(c1.y - c2.y, 2));
}
/* λ μμ μμΉκ΄κ³ ꡬνλ ν¨μ */
int positional_relationship(Circle c1, Circle c2) {
double d = center_distance(c1, c2);//μλ£νμ΄ doubleμμ μ£Όμ.
/* 1. λ μμ΄ μΌμΉν λ */
if (c1.x == c2.x && c1.y == c2.y && c1.r == c2.r) {
return -1;
}
/* 2. λ μμ΄ μΌμΉνμ§ μμ λ */
else {
/* 2-1. μΈλΆ = κ΅μ 0κ° */
if (c1.r + c2.r < d)
return 0;
/* 2-2. μΈμ = κ΅μ 1κ° */
else if (c1.r + c2.r == d)
return 1;
/* 2-3. λμ μμ λ§λ¨ = κ΅μ 2κ° */
else if (abs(c1.r - c2.r) < d && d < c1.r + c2.r)
return 2;
/* 2-4. λ΄μ = κ΅μ 1κ° */
else if (abs(c1.r - c2.r) == d)
return 1;
/* 2-5. λ΄λΆ = κ΅μ 0κ° */
else if (d < abs(c1.r - c2.r))
return 0;
/* 2-6. λμ¬μ = κ΅μ 0κ° */
else if (d == 0)
return 0;
}
}
int main(int argc, char* argv[]) {
int T;
Circle c1, c2;
scanf("%d", &T);
for (int i = 0; i < T; i++) {
scanf("%d %d %d %d %d %d", &c1.x, &c1.y, &c1.r, &c2.x, &c2.y, &c2.r);
printf("%d\n", positional_relationship(c1, c2));
}
return 0;
}
'γβ¨οΈα΄sγPS > λ°±μ€_κΈ°ν' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Baekjoon/λ°±μ€][4153][C/C++] μ§κ°μΌκ°ν (0) | 2023.02.06 |
---|---|
[Baekjoon/λ°±μ€][3009][C/C++] λ€ λ²μ§Έ μ (0) | 2023.01.30 |
[Baekjoon/λ°±μ€][1085][C/C++] μ§μ¬κ°νμμ νμΆ (0) | 2023.01.28 |