BraveDuck 문제 자문 구합니다...

  • richiejang
    richiejang

    예문을 실행한 결과 같은 값이 나오는데 왜 오답 처리 되는지 알 수가 없어 자문구합니다.
    한 수 가르침 부탁 드립니다.
    미리 답변에 감사드립니다.

    import java.util.*;
    import java.util.stream.Collectors;

    public class Main {
    static class Stone {
    private int x,y;
    private boolean checked;
    public Stone(int x, int y) {
    this.x = x;
    this.y = y;
    checked = false;
    }
    public Stone(String sx, String sy) {
    this.x = Integer.parseInt(sx);
    this.y = Integer.parseInt(sy);
    checked = false;
    }

    public int getX() { return x; }
        public int getY() { return y; }
        public boolean getChecked() { return checked; }
        public void setChecked(boolean b) { this.checked = b; }
    }
    
    public static boolean isNearStone (Stone c, Stone n, int j) {
        if (n.getChecked()) return false;
        if (c.getX() == n.getX()) {
            return Math.abs(n.getY() - c.getY()) <= j;
        } else if (c.getY() == n.getY()) {
            return Math.abs(n.getX() - c.getX()) <= j;
        }
        return false;
    }
    
    public static String checkCrossWater (Stone sp, Stone ep, List<Stone> stones, int jump) {
        LinkedList<Stone> queue = new LinkedList<>();
        stones.add(ep);
        queue.add(sp);
        boolean isChecked = false;
        while (!queue.isEmpty() && !isChecked) {
            Stone curp = queue.pop();
            if (curp.getX() == ep.getX() && curp.getY() == ep.getY()) {
                isChecked = true;
                break;
            }
            List<Stone> finds = stones.stream().filter(p -> isNearStone(curp, p, jump)).collect(Collectors.toList());
            finds.stream().forEach(p -> p.setChecked(true));
            queue.addAll(finds);
        }
    
        if (isChecked) return "YES"; else return "NO";
    }
    
    public static void main (String[] args) {
        Scanner scan = new Scanner(System.in);
        List<String> result = new ArrayList<>();
        int casenum = Integer.parseInt(scan.nextLine());
        while (casenum > 0) {
            int jump = Integer.parseInt(scan.nextLine());
            String[] in1 = scan.nextLine().split(" ");
            Stone startp = new Stone(Integer.parseInt(in1[0]), Integer.parseInt(in1[1]));
            String[] in2 = scan.nextLine().split(" ");
            Stone endp = new Stone(Integer.parseInt(in2[0]), Integer.parseInt(in2[1]));
            int stoneCount = Integer.parseInt(scan.nextLine());
            List<Stone> stones = new ArrayList<>();
            while (stoneCount > 0) {
                String[] locs = scan.nextLine().split(" ");
                stones.add(new Stone(locs[0], locs[1]));
                stoneCount--;
            }
            result.add (checkCrossWater(startp, endp, stones, jump));
            casenum--;
        }
        scan.close();
        result.stream().forEach( it -> System.out.println (it) );
    }

    }


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