1. d를 갱신하신 뒤 plus와 minus를 갱신하지 않으신 것 같습니다.
2. result를 출력하신 뒤 줄바꿈을 해 주셔야 합니다.
3. 두 중심 사이의 거리는 정수가 아닐 수도 있습니다. 예) (0, 0)과 (1, 1)
1002번 - 터렛
1번, 그러니까 plus와 minus를 갱신하지 않았다는 얘기는, plus와 minus가 테스트 케이스를 입력받은 이후에 그 테스트 케이스에 맞는 값으로 설정되지 않았다는 이야기입니다.
x1부터 r2까지 입력받은 다음에 그 값으로 plus와 minus의 값을 설정해야 하는데, 두 변수를 선언한 이후에만 값을 바꾸고 x1부터 r2까지 입력받은 이후에는 그 값을 바꾸지 않아 각 테스트 케이스에 맞는 값을 사용하지 못해 오류가 발생하게 됩니다.
참고로, 값이 정의되지 않은 변수를 이용하는 것은 위험합니다. 변수를 선언한 뒤 값을 넣어주지 않으면 임의의 값이 저장되는데, 이 상태로 변수를 이용하면 원치 않는 결과를 얻기 쉽습니다.
아하그러네요!!
근데 아래처럼 코드수정해서 결과 잘 나오는데 제출하면 틀렸다고 나오네요....
int d;
int plus,minus;
// 두 점 사이 거리
d = sqrt(pow(x2-x1,2)+pow(y2-y1,2));
cin>>n;
while(n--){
cin>>x1>>y1>>r1>>x2>>y2>>r2;
int d = sqrt(pow(x2-x1,2)+pow(y2-y1,2));
minus = r2>r1 ? r2-r1 : r1-r2;
plus = r2+r1;
if(d==0 && r1==r2) result = -1; // 완전히 겹칠 때
else if(d==minus || d==plus) result = 1; // 교점 1개
else if(d>minus && d
cout<<result<<'\n';
}
double형으로 선언하면 오차 때문에 매우 위험합니다. sqrt()를 쓰지 않고 제곱만으로 해 보세요.
댓글을 작성하려면 로그인해야 합니다.
swo98 2년 전
입력예시 복사해서 붙이면 0이라고 나와버리는데
로직은 맞게 짠거같은데 뭐가 틀린지 모르겠어요;;;
while문 안에서 값들 하나하나 찍어보면 잘 나오는데 분기문에 안걸러지고
무조건 result = 0 나오네요 ㅠㅠ