πŸ’  Cpp

[BOJ][C++] λ°±μ€€ 1002번: ν„°λ ›

선달 2023. 10. 12. 17:05
λ°˜μ‘ν˜•

https://www.acmicpc.net/problem/1002

 

1002번: ν„°λ ›

각 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λ§ˆλ‹€ λ₯˜μž¬λͺ…이 μžˆμ„ 수 μžˆλŠ” μœ„μΉ˜μ˜ 수λ₯Ό 좜λ ₯ν•œλ‹€. λ§Œμ•½ λ₯˜μž¬λͺ…이 μžˆμ„ 수 μžˆλŠ” μœ„μΉ˜μ˜ κ°œμˆ˜κ°€ λ¬΄ν•œλŒ€μΌ κ²½μš°μ—λŠ” $-1$ 좜λ ₯ν•œλ‹€.

www.acmicpc.net

 

문제

μ‘°κ·œν˜„κ³Ό λ°±μŠΉν™˜μ€ 터렛에 κ·Όλ¬΄ν•˜λŠ” 직원이닀. ν•˜μ§€λ§Œ μ›Œλ‚™ 쑴재감이 μ—†μ–΄μ„œ μΈκ΅¬μˆ˜λŠ” μ°¨μ§€ν•˜μ§€ μ•ŠλŠ”λ‹€. λ‹€μŒμ€ μ‘°κ·œν˜„κ³Ό λ°±μŠΉν™˜μ˜ 사진이닀.

이석원은 μ‘°κ·œν˜„κ³Ό λ°±μŠΉν™˜μ—κ²Œ μƒλŒ€νŽΈ 마린(λ₯˜μž¬λͺ…)의 μœ„μΉ˜λ₯Ό κ³„μ‚°ν•˜λΌλŠ” λͺ…령을 λ‚΄λ Έλ‹€. μ‘°κ·œν˜„κ³Ό λ°±μŠΉν™˜μ€ 각각 μžμ‹ μ˜ ν„°λ › μœ„μΉ˜μ—μ„œ ν˜„μž¬ μ κΉŒμ§€μ˜ 거리λ₯Ό κ³„μ‚°ν–ˆλ‹€.

μ‘°κ·œν˜„μ˜ μ’Œν‘œμ™€ λ°±μŠΉν™˜μ˜ μ’Œν‘œκ°€ 주어지고, μ‘°κ·œν˜„μ΄ κ³„μ‚°ν•œ λ₯˜μž¬λͺ…κ³Όμ˜ 거리과 λ°±μŠΉν™˜μ΄ κ³„μ‚°ν•œ λ₯˜μž¬λͺ…κ³Όμ˜ 거리가 μ£Όμ–΄μ‘Œμ„ λ•Œ, λ₯˜μž¬λͺ…이 μžˆμ„ 수 μžˆλŠ” μ’Œν‘œμ˜ 수λ₯Ό 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

μž…λ ₯

첫째 쀄에 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€μ˜ κ°œμˆ˜κ°€ 주어진닀. 각 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λŠ” λ‹€μŒκ³Ό 같이 이루어져 μžˆλ‹€.

ν•œ 쀄에 곡백으둜 ꡬ뢄 된 μ—¬μ„― μ •μˆ˜κ°€ 주어진닀.

좜λ ₯

각 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λ§ˆλ‹€ λ₯˜μž¬λͺ…이 μžˆμ„ 수 μžˆλŠ” μœ„μΉ˜μ˜ 수λ₯Ό 좜λ ₯ν•œλ‹€. λ§Œμ•½ λ₯˜μž¬λͺ…이 μžˆμ„ 수 μžˆλŠ” μœ„μΉ˜μ˜ κ°œμˆ˜κ°€ λ¬΄ν•œλŒ€μΌ κ²½μš°μ—λŠ” -1을 μΆœλ ₯ν•œλ‹€.

 

풀이

λ‹Ήμ—°νžˆ λ₯˜μž¬λͺ…μ”¨μ˜ μœ„μΉ˜κ°€ μ •μˆ˜λΌκ³  μƒκ°ν•΄μ„œ λΆ€λ₯΄νŠΈν¬μŠ€λ‘œ μ •μˆ˜ μ’Œν‘œλ“€μ„ λ‹€ κ²€μ‚¬ν–ˆλ”λ‹ˆ 25%μ—μ„œ ν‹€λ ΈμŠ΅λ‹ˆλ‹€κ°€ λ–΄λ‹€γ…Ž..

μ •ν™•νžˆλŠ” 닡이 λ¬΄ν•œμΈ 경우λ₯Ό κ°„κ³Όν•˜λ©΄ 25%μ—μ„œ ν‹€λ ΈμŠ΅λ‹ˆλ‹€κ°€ λœ¬λ‹€.

λ₯˜μž¬λͺ…μ”¨λŠ” μœ„μΉ˜κ°€ μ •μˆ˜κ°€ μ•„λ‹μˆ˜λ„ μžˆμŒμ„ κ³ λ €ν•˜μž !!

 

고등학ꡐ 수2 (이전 κ΅μœ‘κ³Όμ • 미적뢄 λ˜λŠ” κ·Έ μ „ 쀑학ꡐ κ³Όμ •) μ–΄λ”˜κ°€μ—μ„œ λ‹€λ£¨λŠ” '두 μ›μ˜ μœ„μΉ˜κ΄€κ³„'λ₯Ό μ΄μš©ν•΄μ„œ κ΅¬ν˜„λ§Œ ν•˜λ©΄ λœλ‹€

 

#include <iostream>

using namespace std;

int t, x1,x2,y1,y2,r1,r2;

int distance(int x, int y, int a, int b) {
    return (x-a)*(x-a) + (y-b)*(y-b);
}

int solution() {
    int distance = (x1-x2)*(x1-x2) + (y1-y2)*(y1-y2);
    int rPlus = (r1+r2)*(r1+r2);
    int rMinus = (r1-r2)*(r1-r2);
    
    if(r1==r2 && distance==0) {
        return -1;
    }
    if(rMinus==distance || rPlus==distance) {
        return 1;
    }
    if(rMinus<distance && distance<rPlus) {
        return 2;
    }
    return 0;
}

int main() {
    cin >> t;
    while(t--) {
        cin >> x1 >> y1 >> r1 >> x2 >> y2 >> r2;
        cout << solution() << "\n";
    }
    return 0;
}

 

 

λ°˜μ‘ν˜•