백준 하늘에서 정의가 빗발친다!

KIMYEONGJUN·2024년 5월 30일
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

첫째 줄에 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을 잘못해줘서 문제가 생긴거였다. 코드를 수정후에 다행이도 문제를 통과할 수 있었다.

profile
Junior backend developer

0개의 댓글