



내가 생각했을때 문제에서 원하는부분
첫째 줄에 N이 주어진다.
둘째 줄부터 총 N개의 줄에는 Xi, Yi, Vi 가 주어진다.
이는 i번째 로봇의 x, y 좌표와 미사일이 이 로봇을 향해 날아가는 속도를 의미한다.
입력값이 주어지는 대로 로봇이 나타난 순서를 의미하며,
맨 처음 나타난 로봇부터 1, 2, 3, ..., N번째 로봇으로 지정한다. x좌표와 y좌표가 같은 곳에 로봇이 2개 이상 존재하는 경우는 없다.
내가 이 문제를 보고 생각해본 부분
for문을 통해 i를 1 ~ N까지 실행한다.
x,y,v를 입력받고 d 즉 거리를 피타고라스의 정리를 이용하여 x,y로 구하고,
Pair에는 거리/속도를 한 값과 i를 추가해준다.
Pair를(거리/속도)로 오름차순 정렬 후 값이 같다면 i로 오름차순 정렬한다.
거리/속도는 시간을 의미한다. 미사일이 도착하는데 걸린 시간이라는 의미이다.
정렬된 Pair 중에 2번째 값 로봇의 순서를 출력해준다.
코드로 구현
package baekjoon.baekjoon_19;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
// 백준 13411번 문제
public class Main668 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
ArrayList<Pair> list = new ArrayList<>();
for(int i = 0; i < N; i++) {
int x = sc.nextInt();
int y = sc.nextInt();
int v = sc.nextInt();
double d = Math.sqrt(x*x + y*y);
Pair p = new Pair(d/v, i+1);
list.add(p);
}
Collections.sort(list, (a, b) -> {
if(a.time < b.time)
return -1;
else if(a.time > b.time)
return 1;
else
return a.index - b.index;
});
for(Pair p : list) {
System.out.println(p.index);
}
sc.close();
}
}
class Pair {
double time;
int index;
Pair(double time, int index) {
this.time = time;
this.index = index;
}
}

처음에 문제를 제출을 눌렀는데 런타임 에러 (IllegalArgument) 가 나왔는데 잘보니깐 Collections.sort을 잘못해줘서 문제가 생긴거였다. 코드를 수정후에 다행이도 문제를 통과할 수 있었다.