๐Ÿ’  BOJ

[BOJ][C++] ๋ฐฑ์ค€ 1004๋ฒˆ: ์–ด๋ฆฐ ์™•์ž

์„ ๋‹ฌ 2024. 8. 12. 19:23
๋ฐ˜์‘ํ˜•

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

 

๋ฌธ์ œ

์–ด๋ฆฐ ์™•์ž๋Š” ์†Œํ˜น์„ฑ B-664์—์„œ ์ž์‹ ์ด ์‚ฌ๋ž‘ํ•˜๋Š” ํ•œ ์†ก์ด ์žฅ๋ฏธ๋ฅผ ์œ„ํ•ด ์‚ด์•„๊ฐ„๋‹ค. ์–ด๋Š ๋‚  ์žฅ๋ฏธ๊ฐ€ ์œ„ํ—˜์— ๋น ์ง€๊ฒŒ ๋œ ๊ฒƒ์„ ์•Œ๊ฒŒ ๋œ ์–ด๋ฆฐ ์™•์ž๋Š”, ์žฅ๋ฏธ๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด ์€ํ•˜์ˆ˜๋ฅผ ๋”ฐ๋ผ ๊ธด ์—ฌํ–‰์„ ํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ์–ด๋ฆฐ ์™•์ž์˜ ์šฐ์ฃผ์„ ์€ ๊ทธ๋ ‡๊ฒŒ ์ข‹์ง€ ์•Š์•„์„œ ํ–‰์„ฑ๊ณ„ ๊ฐ„์˜ ์ด๋™์„ ์ตœ๋Œ€ํ•œ ํ”ผํ•ด์„œ ์—ฌํ–‰ํ•ด์•ผ ํ•œ๋‹ค. ์•„๋ž˜์˜ ๊ทธ๋ฆผ์€ ์–ด๋ฆฐ ์™•์ž๊ฐ€ ํŽผ์ณ๋ณธ ์€ํ•˜์ˆ˜ ์ง€๋„์˜ ์ผ๋ถ€์ด๋‹ค.

๋นจ๊ฐ„ ์‹ค์„ ์€ ์–ด๋ฆฐ ์™•์ž๊ฐ€ ์ถœ๋ฐœ์ ์—์„œ ๋„์ฐฉ์ ๊นŒ์ง€ ๋„๋‹ฌํ•˜๋Š”๋ฐ ์žˆ์–ด์„œ ํ•„์š”ํ•œ ํ–‰์„ฑ๊ณ„ ์ง„์ž…/์ดํƒˆ ํšŸ์ˆ˜๋ฅผ ์ตœ์†Œํ™”ํ•˜๋Š” ๊ฒฝ๋กœ์ด๋ฉฐ, ์›์€ ํ–‰์„ฑ๊ณ„์˜ ๊ฒฝ๊ณ„๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒฝ๋กœ๋Š” ์—ฌ๋Ÿฌ ๊ฐœ ์กด์žฌํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ ์–ด๋„ 3๋ฒˆ์˜ ํ–‰์„ฑ๊ณ„ ์ง„์ž…/์ดํƒˆ์ด ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

์œ„์™€ ๊ฐ™์€ ์€ํ•˜์ˆ˜ ์ง€๋„, ์ถœ๋ฐœ์ , ๋„์ฐฉ์ ์ด ์ฃผ์–ด์กŒ์„ ๋•Œ ์–ด๋ฆฐ ์™•์ž์—๊ฒŒ ํ•„์š”ํ•œ ์ตœ์†Œ์˜ ํ–‰์„ฑ๊ณ„ ์ง„์ž…/์ดํƒˆ ํšŸ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•ด ๋ณด์ž. ํ–‰์„ฑ๊ณ„์˜ ๊ฒฝ๊ณ„๊ฐ€ ๋งž๋‹ฟ๊ฑฐ๋‚˜ ์„œ๋กœ ๊ต์ฐจํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ์—†๋‹ค. ๋˜ํ•œ, ์ถœ๋ฐœ์ ์ด๋‚˜ ๋„์ฐฉ์ ์ด ํ–‰์„ฑ๊ณ„ ๊ฒฝ๊ณ„์— ๊ฑธ์ณ์ง„ ๊ฒฝ์šฐ ์—ญ์‹œ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€์ง€ ์•Š๋Š”๋‹ค.

์ž…๋ ฅ

์ž…๋ ฅ์˜ ์ฒซ ์ค„์—๋Š” ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ๊ฐœ์ˆ˜ T๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ทธ ๋‹ค์Œ ์ค„๋ถ€ํ„ฐ ๊ฐ๊ฐ์˜ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค์— ๋Œ€ํ•ด ์ฒซ์งธ ์ค„์— ์ถœ๋ฐœ์  (x1, y1)๊ณผ ๋„์ฐฉ์  (x2, y2)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘ ๋ฒˆ์งธ ์ค„์—๋Š” ํ–‰์„ฑ๊ณ„์˜ ๊ฐœ์ˆ˜ n์ด ์ฃผ์–ด์ง€๋ฉฐ, ์„ธ ๋ฒˆ์งธ ์ค„๋ถ€ํ„ฐ n์ค„์— ๊ฑธ์ณ ํ–‰์„ฑ๊ณ„์˜ ์ค‘์ ๊ณผ ๋ฐ˜์ง€๋ฆ„ (cx, cy, r)์ด ์ฃผ์–ด์ง„๋‹ค.

์ถœ๋ ฅ

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ๋Œ€ํ•ด ์–ด๋ฆฐ ์™•์ž๊ฐ€ ๊ฑฐ์ณ์•ผ ํ•  ์ตœ์†Œ์˜ ํ–‰์„ฑ๊ณ„ ์ง„์ž…/์ดํƒˆ ํšŸ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

์ œํ•œ

  • -1000 ≤ x1, y1, x2, y2, cx, cy ≤ 1000
  • 1 ≤ r ≤ 1000
  • 1 ≤ n ≤ 50
  • ์ขŒํ‘œ์™€ ๋ฐ˜์ง€๋ฆ„์€ ๋ชจ๋‘ ์ •์ˆ˜

ํ’€์ด

// ํ’€์ด : https://whkakrkr.tistory.com

#include <iostream>
#include <vector>

using namespace std;

int get_distance(int x1, int y1, int x2, int y2) {
    return (x1-x2)*(x1-x2) + (y1-y2)*(y1-y2);
}

int main() {
    ios_base::sync_with_stdio(false);
	cout.tie(NULL);
	cin.tie(NULL);

    int t;
    cin >> t;
    while(t--) {
        int x1,x2,y1,y2, n, cx,cy,r, ans=0;
        cin >> x1 >> y1 >> x2 >> y2 >> n;
        
        while(n--) {
            cin >> cx >> cy >> r;
            
            // ๊ฐ ์ง€์ ์ด ์› ๋‚ด๋ถ€์— ์žˆ๋Š”์ง€ ์—ฌ๋ถ€
            bool isStartIn = get_distance(x1, y1, cx, cy) <= r*r;
            bool isEndIn = get_distance(x2, y2, cx, cy) <= r*r;
            if(isStartIn != isEndIn) {
                ans++;
            }
        }
        
        cout << ans << "\n";
    }
    
    return 0;
}

 

์‹œํ–‰์ฐฉ์˜ค

	if(isStartIn || isEndIn) {
                if(isStartIn && isEndIn) {
                    break;
                }
                ans++;
            }

 

์œ„ ์ฝ”๋“œ๋ฅผ ์•„๋ž˜ ์ฝ”๋“œ๋กœ ๋ฐ”๊ฟ”์„œ ์‹œ๊ฐ„์ดˆ๊ณผ ํ•ด๊ฒฐ

            if(isStartIn != isEndIn) {
                ans++;
            }
๋ฐ˜์‘ํ˜•