# [Algorithm/JS] ๋ฐฑ์ค 1002๋ฒ ํฐ๋
๐ ๋ฌธ์ ๋ฐ๋ก๊ฐ๊ธฐ (opens new window)
# Question
์กฐ๊ทํ๊ณผ ๋ฐฑ์นํ์ ํฐ๋ ์ ๊ทผ๋ฌดํ๋ ์ง์์ด๋ค. ํ์ง๋งย ์๋ ์กด์ฌ๊ฐ์ด ์์ด์ ์ธ๊ตฌ์๋ ์ฐจ์งํ์ง ์๋๋ค. ๋ค์์ ์กฐ๊ทํ๊ณผ ๋ฐฑ์นํ์ ์ฌ์ง์ด๋ค. ์ด์์์ ์กฐ๊ทํ๊ณผ ๋ฐฑ์นํ์๊ฒ ์๋ํธ ๋ง๋ฆฐ(๋ฅ์ฌ๋ช )์ ์์น๋ฅผ ๊ณ์ฐํ๋ผ๋ ๋ช ๋ น์ ๋ด๋ ธ๋ค. ์กฐ๊ทํ๊ณผ ๋ฐฑ์นํ์ ๊ฐ๊ฐ ์์ ์ ํฐ๋ ์์น์์ ํ์ฌ ์ ๊น์ง์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํ๋ค.
์กฐ๊ทํ์ ์ขํ (x1, y1)์ ๋ฐฑ์นํ์ ์ขํ (x2, y2)๊ฐ ์ฃผ์ด์ง๊ณ , ์กฐ๊ทํ์ด ๊ณ์ฐํ ๋ฅ์ฌ๋ช ๊ณผ์ ๊ฑฐ๋ฆฌ r1๊ณผ ๋ฐฑ์นํ์ด ๊ณ์ฐํ ๋ฅ์ฌ๋ช ๊ณผ์ ๊ฑฐ๋ฆฌ r2๊ฐ ์ฃผ์ด์ก์ ๋, ๋ฅ์ฌ๋ช ์ด ์์ ์ ์๋ ์ขํ์ ์๋ฅผ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
# Input
์ฒซ์งธ ์ค์ ํ ์คํธ ์ผ์ด์ค์ ๊ฐ์ T๊ฐ ์ฃผ์ด์ง๋ค. ๊ฐ ํ ์คํธ ์ผ์ด์ค๋ ๋ค์๊ณผ ๊ฐ์ด ์ด๋ฃจ์ด์ ธ ์๋ค.
ํ ์ค์ x1, y1, r1, x2, y2, r2๊ฐ ์ฃผ์ด์ง๋ค. x1, y1, x2, y2๋ -10,000๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , 10,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์ ์์ด๊ณ , r1, r2๋ 10,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๋ค.
# Output
๊ฐ ํ ์คํธ ์ผ์ด์ค๋ง๋ค ๋ฅ์ฌ๋ช ์ด ์์ ์ ์๋ ์์น์ ์๋ฅผ ์ถ๋ ฅํ๋ค. ๋ง์ฝ ๋ฅ์ฌ๋ช ์ด ์์ ์ ์๋ ์์น์ ๊ฐ์๊ฐ ๋ฌดํ๋์ผ ๊ฒฝ์ฐ์๋ -1์ ์ถ๋ ฅํ๋ค.
# Input
3
0 0 13 40 0 37
0 0 3 0 7 4
1 1 1 1 1 5
2
3
4
# Output
2
1
0
2
3
# Solution
์ด ๋ฌธ์ ๋ ๊ฐ ์ขํ(x1, y1), (x2, y2)๊ฐ ์์ ์ค์ฌ์ด๊ณ , ๋ฐ์ง๋ฆ์ด r1, r2 ์ผ ๋ ๋ ์์ ์ ์ ์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ ๋ฌธ์ ๋ค.
๋จผ์ ๋ ์ ์ค์ฌ์ ๊ฑฐ๋ฆฌ์ ๋ ๋ฐ์ง๋ฆ์ ํฉ, ๋ ๋ฐ์ง๋ฆ์ ์ฐจ์ด๋ฅผ ์์์ผํ๋ค.
- dist = ๋ ์ ์ค์ฌ์ ๊ฑฐ๋ฆฌ
- rsum = ๋ ๋ฐ์ง๋ฆ์ ํฉ
- rsub = ๋ ๋ฐ์ง๋ฆ์ ์ฐจ
# ์ ์ ์ด ๋ฌดํ๋์ผ ๊ฒฝ์ฐ
๋ ์์ ์ ์ ์ด ๋ฌดํ๋์ผ ๊ฒฝ์ฐ๋ ๋ ์์ด ์์ ํ ๊ฒน์ณ์ก์ ๊ฒฝ์ฐ์ด๋ค. ์ฆ, ํฌ๊ธฐ๊ฐ ๋์ผ(rsub = 0)ํ๊ณ , ์ขํ๊ฐ ๊ฐ๋ค(dist = 0).
dist === 0 || rsub === 0
# ์ ์ ์ด ์์ ๊ฒฝ์ฐ
- ๋ ์์ด ์กฐ๊ธ๋ ํฌํจ๊ด๊ณ๋ฅผ ์ด๋ฃจ์ง ์์ ๊ฒฝ์ฐ (dist > rsum)
- ํ ์ ์์ ๋ค๋ฅธ ์์ด ์ ์ ์์ด ์์ ํ ํฌํจ๋ ๊ฒฝ์ฐ (dist < rsub)
dist > rsum || dist < rsub
# ์ ์ ์ด ํ๋์ผ ๊ฒฝ์ฐ
- ํ ์ ์์ ๋ค๋ฅธ ์์ด ์์ ํ ํฌํจ๋์ด ์ ์ ์ด ํ๋์ผ ๊ฒฝ์ฐ (dist = rsum)
- ๋ ์์ด ํฌํจ๊ด๊ณ๋ฅผ ์ด๋ฃจ์ง ์์ผ๋ ํ๋์ ์ ์ ์ด ์์ ๊ฒฝ์ฐ (dist = rsub)
dist === rsum || dist === rsub
# ์ ์ ์ด ๋๊ฐ์ผ ๊ฒฝ์ฐ
๋ ์ ์ค์ฌ์ ๊ฑฐ๋ฆฌ๊ฐ ๋ ๋ฐ์ง๋ฆ ํฉ๋ณด๋ค ์๊ณ , ๋ ๋ฐ์ง๋ฆ ์ฐจ์ด๋ณด๋ค ํด ๊ฒฝ์ฐ
dist < rsum && dist > sub
const fs = require('fs');
const [count, ...input] = fs.readFileSync('../input.txt').toString().trim().split('\n');
input.map((t) => {
const [x1, y1, r1, x2, y2, r2] = t.split(' ').map(Number);
const dist = Math.sqrt(Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2)); // ๋ ์ขํ์ ๊ฑฐ๋ฆฌ
const rsum = r1 + r2; // ๋ ์์ ๋ฐ์ง๋ฆ ํฉ
const rsub = Math.abs(r1 - r2); // ๋ ๋ฐ์ง๋ฆ ์ฐจ์ ์ ๋๊ฐ
if ((dist === 0) & (rsub === 0)) return console.log(-1);
if (dist > rsum || dist < rsub) return console.log(0);
if (dist === rsum || dist === rsub) return console.log(1);
console.log(2);
});
2
3
4
5
6
7
8
9
10
11
12
13
14