Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
Tags
- 알고리즘
- 부트캠프후기
- 자바
- 정렬
- LG유플러스 유레카 프론트엔드 개발자
- 웹시큐리티
- git branch 협업
- zod
- 멀티캠퍼스IT부트캠프
- 백준
- tanstack query
- LG유플러스 유레카 부트캠프
- 별찍기10
- 멀티캠퍼스IT부트캠프티
- 소수
- LG유플러스 유레카 프론트엔드
- 브루트포스
- Do it! 자료구조와 함께 배우는 알고리즘 입문
- 재귀
- 프론트엔드 비대면반
- 스레드
- Java
- 시간 복잡도
- 프론트엔드
- 유레카 부트캠프
- 코딩
- LG유플러스 유레카 3기 프론트엔드
- 프로세스
- 2775번 문제
- 애자일
Archives
- Today
- Total
개발 일기
백준 1002번 문제풀이 - 터렛 본문

https://www.acmicpc.net/problem/1002
1002번: 터렛
각 테스트 케이스마다 류재명이 있을 수 있는 위치의 수를 출력한다. 만약 류재명이 있을 수 있는 위치의 개수가 무한대일 경우에는 -1을 출력한다.
www.acmicpc.net
문제를 해석하면 결국 두 원이 동일한 경우 -1, 두 원이 접하지 않을 때 0, 두 원이 한 점에서 접할 경우 1, 두 점에서 만나면 2를 출력하도록 하면 되는 문제이다.
코딩
public class Turret {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int T = Integer.parseInt(br.readLine());
for (int i = 0; i < T; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int x1 = Integer.parseInt(st.nextToken());
int y1 = Integer.parseInt(st.nextToken());
int r1 = Integer.parseInt(st.nextToken());
int x2 = Integer.parseInt(st.nextToken());
int y2 = Integer.parseInt(st.nextToken());
int r2 = Integer.parseInt(st.nextToken());
// 원 중심 거리의 제곱
int d_square = (int)(Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2));
// 원 중심, 반지름이 같을 때
if (x1 == x2 && y1 == y2 && r1 == r2) {
sb.append(-1).append('\n');
}
// 두 원이 접하지 않을 경우
else if (d_square > Math.pow(r1 + r2, 2) || d_square < Math.pow(r2 - r1, 2)) {
sb.append(0).append('\n');
}
// 두 원이 한 점에서 접할 경우 (내접, 외접)
else if (d_square == Math.pow(r1 + r2, 2) || d_square == Math.pow(r1 - r2, 2)) {
sb.append(1).append('\n');
}
// 두 원이 두 점에서 만날 때
else {
sb.append(2).append('\n');
}
}
System.out.println(sb);
}
}
결과

느낀 점
두 원의 상태에 따라 출력하도록 하면 된다는 것을 안다면 쉬운 문제였다. 하지만 코딩을 하는 과정에서 문제가 생겼다. Math클래스의 sqrt를 사용하여 원 중심간 거리를 제곱근으로 구하고 사용했지만 오차가 발생하여 틀리게 된 것이다.
Math클래스를 사용할 때 실제 수학과는 차이가 있다는 것을 항상 염두하고 사용해야겠다.
'백준 문제풀이' 카테고리의 다른 글
| 백준 10870번 문제풀이 - 피보나치 함수 (0) | 2021.11.28 |
|---|---|
| 백준 10872번 문제풀이 - 팩토리얼 (0) | 2021.11.27 |
| 백준 3053번 문제풀이 - 택시 기하학 (0) | 2021.11.23 |
| 백준 4153번 문제풀이 - 직각삼각형 (0) | 2021.11.23 |
| 백준 3009번 문제풀이 - 네 번째 점 (0) | 2021.11.23 |
Comments