일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- discord
- 멋쟁이사자처럼10기
- 코딩동아리
- 멋쟁이사자처럼11기
- 멋사 합격
- 파이썬
- 멋사 서류
- 멋사 10기
- 멋쟁이사자처럼 서류
- IT동아리
- ㅏㄴ
- 멋쟁이사자처럼대학
- 파이썬 크롤링
- 깃허브
- 웹동아리
- 크롤링
- 멋사
- 멋사12
- 멋사10기
- API
- 디스코드봇
- 백엔드
- 멋쟁이 사자처럼
- 알림봇
- django
- 멋사 서류평가
- 멋사11기
- 멋쟁이사자처럼
- 멋사 면접
- 기사 제목 크롤링
- Today
- Total
ACHO.pk devlog
[Baekjoon-java] #1004 어린왕자 본문
#1004
문제
어린 왕자는 소혹성 B-664에서 자신이 사랑하는 한 송이 장미를 위해 살아간다. 어느 날 장미가 위험에 빠지게 된 것을 알게 된 어린 왕자는, 장미를 구하기 위해 은하수를 따라 긴 여행을 하기 시작했다. 하지만 어린 왕자의 우주선은 그렇게 좋지 않아서 행성계 간의 이동을 최대한 피해서 여행해야 한다. 아래의 그림은 어린 왕자가 펼쳐본 은하수 지도의 일부이다.
![](https://blog.kakaocdn.net/dn/oLWRg/btrxkN2h1qQ/FK8OPs1wKz3LiFAftPnJFk/img.gif)
빨간 실선은 어린 왕자가 출발점에서 도착점까지 도달하는데 있어서 필요한 행성계 진입/이탈 횟수를 최소화하는 경로이며, 원은 행성계의 경계를 의미한다. 이러한 경로는 여러 개 존재할 수 있지만 적어도 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://blog.kakaocdn.net/dn/bXOIet/btrxiFxnm1V/XigLf3GQzOHg1k86tH9Q30/img.png)
![](https://blog.kakaocdn.net/dn/Rb88I/btrxqbWq2NG/0cq4j8O5Cbvb6IWTO6Kp8K/img.jpg)
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
int[] X = new int[5];
int[] C = new int[4];
int count = 0;
BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
for(int t = 1; t <= T; t++) {
StringTokenizer st = new StringTokenizer(br.readLine()," ");
for(int k = 1; k <= 4; k++) {
X[k] = Integer.parseInt(st.nextToken()); //출발점, 도착점
}
int n = Integer.parseInt(br.readLine()); //행성 개수
for(int i = 1; i <= n; i++) {
StringTokenizer ss = new StringTokenizer(br.readLine()," ");
for(int j = 1; j <=3; j++) {
C[j] = Integer.parseInt(ss.nextToken());
}
double Sdis = Math.pow((X[1]-C[1]), 2)
+ Math.pow(X[2] - C[2], 2);
double Fdis = Math.pow((X[3]-C[1]), 2)
+ Math.pow(X[4] - C[2], 2);
double SFdis = Math.pow(X[1]-X[3], 2)
+Math.pow(X[2]-X[4], 2);
double r = Math.pow(C[3], 2);
if(Sdis <r && Fdis < r) continue;
if(Sdis < r)
count ++;
if(Fdis < r)
count ++;
}
System.out.println(count);
count = 0;
}
}
}
길이를 너무 길게한 점.. 다음에는 메서드 써서 풀어봐야겠다.
'알고리즘 > 백준알고리즘_자바' 카테고리의 다른 글
[Baekjoon-java] #2480 주사위 세 개 (0) | 2022.03.27 |
---|---|
[Baekjoon-java] #2525 오븐시계 (0) | 2022.03.27 |
[Baekjoon-java] #1003 피보나치 함수 (0) | 2022.03.25 |
[Baekjoon-java] #1002 터렛 (0) | 2022.03.24 |
[Baekjoon-java] #1000 A+B #1001 A-B (0) | 2022.03.24 |