BRAVEDUCK 관련 질문입니다.

  • tkagksmsen
    tkagksmsen

    안녕하세요

    제가 금번 BRAVEDUCK 문제를 푸는 도중에 오답에 대응하지 못해 이렇게 질문을 올리게 되었습니다.

    먼저 제가 취한 방법은 돌들의 위치 값을 받아들이면서 바로바로 0번의 돌과 이어지는 경로를 Set에 만들어 가는 방법을 택했습니다.

    정확하게 말하면 0번을 기준으로 이어진 모든 돌들을 두고 마지막 돌돌이 이 중에 있으면 탈출 성공, 아니라면 실패 이런 방식을 취했습니다.

    하지만 계속적으로 오답이 나와서 더이상 해결 방법을 찾지 못해 이렇게 문의드립니다.

    간단한 팁이라도 알 수 없을까요?

    부탁드립니다 도와주세요.. ㅠㅠ

    import java.awt.Point;
    import java.util.ArrayList;
    import java.util.HashSet;
    import java.util.List;
    import java.util.Scanner;
    import java.util.Set;
    
    
    public class Main {
        boolean[][] path;
        List<Point> rockList;
        Set<Integer> reachable;
    
        public static void main(String[] args) {
            new Main();
        }
    
        public Main() {
            Scanner scn = new Scanner(System.in);
    
            int cnt = scn.nextInt();
            for(int i = 0; i < cnt; i++) {
                int jumpLimit = scn.nextInt();
    
                Point start = new Point(scn.nextInt(), scn.nextInt());
                Point last = new Point(scn.nextInt(), scn.nextInt());
    
                rockList = new ArrayList<Point>();
                reachable = new HashSet<Integer>();
    
                int rockCnt = scn.nextInt();
                path = new boolean[rockCnt + 2][rockCnt + 2];
    
                rockList.add(start);
                for(int j = 0; j < rockCnt; j++) {
                    rockList.add(new Point(scn.nextInt(), scn.nextInt()));
                }
                rockList.add(last);
                reachable.add(0);
                makePath(rockList, jumpLimit);
    
                System.out.println(reachable.contains(rockList.size() - 1)? "YES" :"NO");
            }
    
            scn.close();
        }
    
        public void makePath(List<Point> list, int jumpLimit) {
            for(int i = 0; i < list.size(); i++) {
                for(int j = 0; j < list.size(); j++) {
                    if(i != j) {
                        if(Math.pow((list.get(i).x - list.get(j).x), 2)
                                + Math.pow((list.get(i).y - list.get(j).y), 2)
                                <= jumpLimit * jumpLimit) {
                            path[i][j] = true;
                            if(reachable.contains(i))
                                reachable.add(j);
                        }
                    }
                }
            }
        }
    }
    


    10년 전
1개의 댓글이 있습니다.
  • Being
    Being

    구현해주신 방법으로는 [0, 2, 1, 3]과 같은 순서의 경로를 탐색하지 못합니다.


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