남극 기지... 맞는 것 같은데, WA가 나오네요. 테스트 케이스 ...

  • ssamkj
    ssamkj

    남극 기지... 맞는 것 같은데, WA가 나오네요. 테스트 케이스 더 가지고 계신 분 있으시면 부탁 드릴게요.

    import java.io.BufferedReader;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;

    public class Main {
    public static void main(String[] args){
    try {
    northPole();
    } catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    private static void northPole() throws IOException{
    BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    String total = in.readLine();
    int tot = Integer.parseInt(total);
    int number = 0;
    Map list = null;

    for(int i=0;i<tot;i++){
            list = new HashMap<Integer, String[]>();
            number = Integer.parseInt(in.readLine());
            for(int j=0;j<number ;j++){
                String[] spot = in.readLine().split(" ");
                list.put(j, spot);
            }
    
            System.out.printf("%.2f\n", Math.sqrt(getMin(list))); 
        }
    
        in.close();
    
    }
    
    private static double getMin(Map<Integer, String[]> list){
        List<Double> distance = new ArrayList<Double>();
    
        int size = list.size();
        String[] spot = null;
        Double f_atti = 0.0;
        Double f_lati = 0.0;
        Double atti = 0.0;
        Double lati = 0.0;
        Double min_dis = 0.0;
        for(int i=0;i<size;i++){
            min_dis = 0.0;
            spot = list.get(i);
            f_atti = Double.parseDouble(spot[0]);
            f_lati = Double.parseDouble(spot[1]);
            for(int j=i+1;j<size;j++){
                spot = list.get(j);
                atti = Double.parseDouble(spot[0]);
                lati = Double.parseDouble(spot[1]);
                double cal_atti = (atti- f_atti);
    
                if(cal_atti<0)
                    cal_atti*= -1;
    
                double cal_lati = (lati- f_lati);
    
                if(cal_lati<0)
                    cal_lati*= -1;
    
                if(min_dis==0.0){
                    min_dis = cal_atti*cal_atti+cal_lati*cal_lati;
                }else{
                    if(min_dis > cal_atti*cal_atti+cal_lati*cal_lati)
                        min_dis = cal_atti*cal_atti+cal_lati*cal_lati;
                }
            }
            distance.add(min_dis);
        }
        double max = 0.0;
        for(Double d : distance){
            if(max==0.0){
                max = d;
            }else if(d>max){
                max=d;
            }
        }
        return max;
    }

    }

    이게 소스이고, 사용한 테스트 케이스는

    4
    5
    0 0
    1 0
    1 1
    1 2
    0 2
    6
    1.0 1.0
    30.91 8
    4.0 7.64
    21.12 6.0
    11.39 3.0
    5.31 11.0
    6
    1 1
    17 39
    4 7
    6 21
    5 11
    3 11
    9
    0 0
    1000 1000
    0 1000
    1000 0
    500 500
    7 3
    7 3
    7 3
    7 3

    정답
    1.00
    10.18
    21.10
    707.11

    밑에 두개는 혹씨나 해서 다른 분이 만든걸로 확인했거든요. 동일한 정답이 나오는데...

    흠.....

    여기 대부분이 C++ 이던데, 혹씨... 100만분의 1의 확률로 자바 컴파일에 문제가 있는 것은 아니겠지요?

    ㅋㅋ


    12년 전
5개의 댓글이 있습니다.
  • VOCList
    VOCList

    해법에 대해서 질문을 하실 때는 보통 소스만 올리시기보다는 문제 링크와 소스, 그리고 풀이방법을 같이 써주시는 편이 답변을 듣기 쉽습니다. 왜냐면 여기 사람들 다들 귀찮아해서.........ㅠㅠ


    12년 전 link
  • onso9line
    onso9line

    위에 복사하신 코드는 컴파일이 안되서요 제일 마지막에 submit하신거 복사해서 돌려보니
    1 0
    0 0
    91 0
    92 0
    위의 경우, 91.00 이 나옵니다. 90.00 이 나와야 합니다.
    input순서에 따라 답이 다르게 나오고 있습니다.

    1.0 1.0
    30.91 8
    4.0 7.64
    21.12 6.0
    11.39 3.0
    5.31 11.0
    의 경우도 순서를 바꿔서 입력하면 답이 다르게 나오는 경우가 있습니다.


    12년 전 link
  • ssamkj
    ssamkj

    onso9line 오... 감사합니다.


    12년 전 link
  • ssamkj
    ssamkj

    onso9line 님 덕분에 문제점을 찾았어요. ^^
    해결해서 수정했는데, 이젠 시간이 문제네요. ㅋㅋㅋ
    아직 가야 할 길이 먼듯. ^^


    12년 전 link
  • onso9line
    onso9line

    도움이 되셨다니 다행이에요 ^^


    12년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.