[백준][c++] 1002-터렛

2025. 4. 13. 11:00·알고리즘/문제풀이 :백준

📌문제 설명

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

 

(x1, y1), (x2, y2) , r1, r2 가 주어졌을 때 두 점에서 두 거리를 만족하는 좌표의 개수를 구하는 문제였습니다.

 

💡생각

처음에는 방식이 생각나지 않아서 -10000 ~ 10000 까지 다 대입해서라도 풀어봐야 겠다고 생각했습니다.

#include <iostream>
#include <cmath>
using namespace std;

/*
 * r1(류재명) = x1, y1 (조규현) 에서의 거리
 * r2(류재명) = x2, y2 (백승환) 에서의 거리
 * 루트((x3 - x1)^2 + (y3 - y1)^2) == r1
 * 루트((x3 - x2)^2 + (y3 - y2)^2) == r2
 * 두 조건이 성립해야 위치로 인정된다.
 */


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

    cin >> T;

    int x1, x2, x3;
    int y1, y2, y3;
    int r1, r2;

    for(int i = 0; i < T; i++){
        cin >> x1 >> y1 >> r1 >> x2 >> y2 >> r2;
        int answer = 0;
        if(r1 == 0 || r2 == 0){
            cout<<-1;
            continue;
        }
        for(int j = -10000; j <= 10000; j++){
            for(int k = -10000; k <= 10000; k++){
                if(sqrt(pow(x1 - j,2) + pow(y1 - k, 2)) == r1 &&
                   sqrt(pow(x2 - j,2) + pow(y2 - k, 2)) == r2){
                    answer++;
                }
            }
        }
        cout << answer << '\n';
    }


}

이건 좀 아닌 거 같은데...

🔥풀이

풀이를 생각하지 못해서 다른 풀이 방식을 참조했을 때 수학적인 계산이 필요했다는 걸 알 수 있었습니다.

반지름의 길이와 두 점 사이의 거리를 활용해서 원을 그렸을 때 몇개의 지점에서 만나는지를 확인하면 풀 수 있는 문제였습니다.

#include <iostream>
#include <cmath>
using namespace std;

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

    cin >> T;

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

    for(int i = 0; i < T; i++){
        cin >> x1 >> y1 >> r1 >> x2 >> y2 >> r2;

        double distance = sqrt(pow(x1 - x2,2) + pow(y1 - y2, 2));
        double distance2 = r1 > r2 ? r1 -r2 : r2 - r1;

        if(distance == 0 && r1 == r2) //두 점이 같은 위치에 있고 반지름 길이도 같을 때
        {
            cout << "-1" <<"\n";
        }
        else if(r1 + r2 == distance || distance2 == distance){
        //두 점의 위치는 다르지만 하나의 점에서 만나게 될 때
            cout << "1" << "\n";
        }
        else if(r1 + r2 > distance && distance2 < distance){
        //두 점의 위치는 다르지만 두 점에서 만날 때
            cout << "2" << "\n";
        }else {
        //만나는 점이 없을 때
            cout << "0" << "\n";
        }
    }


}


📕참고

https://gaeunhan.tistory.com/57

 

[C++ 백준] 1002 터렛

블로그에 올리는 모든 문제 풀이는 깃허브에 올려져 있습니다. 문제 설명 조규현의 좌표(X1, Y1)와 백승환의 좌표(X2, Y2)가 주어지고, 조규현이 계산한 류재명과의 거리 r1과 백승환이 계산한 류재

gaeunhan.tistory.com

 

https://reo91004.tistory.com/146

 

[백준 / BOJ] 1002번 터렛 (C++, Python)

링크 : https://www.acmicpc.net/problem/1002 1002번: 터렛 각 테스트 케이스마다 류재명이 있을 수 있는 위치의 수를 출력한다. 만약 류재명이 있을 수 있는 위치의 개수가 무한대일 경우에는 -1을 출력한다

reo91004.tistory.com

 

'알고리즘 > 문제풀이 :백준' 카테고리의 다른 글

[백준][C++] 토너먼트  (0) 2025.04.29
[백준][c++] 1024-수열의 합  (0) 2025.04.13
[백준][JAVA] 2493 탑  (1) 2025.01.20
[백준][Java] 10799 - 쇠막대기  (1) 2025.01.15
[백준][JAVA] 2579 계단 오르기  (0) 2025.01.06
'알고리즘/문제풀이 :백준' 카테고리의 다른 글
  • [백준][C++] 토너먼트
  • [백준][c++] 1024-수열의 합
  • [백준][JAVA] 2493 탑
  • [백준][Java] 10799 - 쇠막대기
각쿄
각쿄
  • 각쿄
    개발일기
    각쿄
  • 전체
    오늘
    어제
    • 분류 전체보기 (20)
      • 알고리즘 (11)
        • 문제풀이 : 프로그래머스 (0)
        • 문제풀이 :백준 (11)
        • 알고리즘 개념 (0)
      • 자료구조 (2)
      • 기초 (0)
        • 운영체제 (0)
        • 디자인패턴 (0)
        • 웹 (0)
        • 컴퓨터 네트워크 (0)
      • Spring (0)
      • IT이슈 (0)
      • 자바(Java) (5)
      • 에러(Error) (1)
        • Mysql (1)
      • 활동 (0)
        • 혼공학습단13기 - 혼자 공부하는 컴퓨터구조 운영.. (0)
      • 기능 구현! (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Stack
    혼공학습단
    스택
    백준
    Java
    mysql
    다이나믹 프로그래밍
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
각쿄
[백준][c++] 1002-터렛
상단으로

티스토리툴바