DRAWRECT 질문입니다.

  • mewards
    mewards

    DRAWRECT

    오답이라고 결과 뜨는데 왜 오답인지 도무지 모르겠어서
    글 남깁니다.

    import java.util.ArrayList;
    import java.util.Scanner;
    
    public class Main {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            ArrayList<Integer> X = new ArrayList<>();
            ArrayList<Integer> Y = new ArrayList<>();
            int cases = sc.nextInt();
            while (cases-- > 0) {
                for (int i = 0; i < 3; i++) {
                    int x = sc.nextInt();
                    int y = sc.nextInt();
                    X.add(x);
                    Y.add(y);
                }
            }
            for (int i = 0; 3 * i < X.size(); i++) {
                double a, b, c;
                int ans_x, ans_y;
                a = Math.pow((X.get(3 * i) - X.get(3 * i + 1)), 2)
                        + Math.pow((Y.get(3 * i) - Y.get(3 * i + 1)), 2);
    
                b = Math.pow((X.get(3 * i + 1) - X.get(3 * i + 2)), 2)
                        + Math.pow((Y.get(3 * i + 1) - Y.get(3 * i + 2)), 2);
    
                c = Math.pow((X.get(3 * i) - X.get(3 * i + 2)), 2)
                        + Math.pow((Y.get(3 * i) - Y.get(3 * i + 2)), 2);
                if (Math.max(a, b) == a) {
                    if (Math.max(a, c) == a) {
                        ans_x = X.get(3 * i)
                                - (X.get(3 * i + 2) - X.get(3 * i + 1));
                        ans_y = Y.get(3 * i)
                                - (Y.get(3 * i + 2) - Y.get(3 * i + 1));
                    } else {
                        ans_x = X.get(3 * i)
                                - (X.get(3 * i + 1) - X.get(3 * i + 2));
                        ans_y = Y.get(3 * i + 1)
                                - (Y.get(3 * i + 1) - Y.get(3 * i + 2));
                    }
                } else {
                    if (Math.max(b, c) == b) {
                        ans_x = X.get(3 * i + 2)
                                - (X.get(3 * i) - X.get(3 * i + 1));
                        ans_y = Y.get(3 * i + 2)
                                - (Y.get(3 * i) - Y.get(3 * i + 1));
                    } else {
                        ans_x = X.get(3 * i)
                                - (X.get(3 * i + 1) - X.get(3 * i + 2));
                        ans_y = Y.get(3 * i)
                                - (Y.get(3 * i + 1) - Y.get(3 * i + 2));
                    }
                }
                System.out.println(ans_x + " " + ans_y);
    
            }
        }
    }

    10년 전
1개의 댓글이 있습니다.
  • Being
    Being
    1. 코드가 좋게 말해 대칭적이고 나쁘게 말해 중복이 많은데, 중복된 코드 중 패턴에 안 맞는 부분이 있는 것 같습니다.
    2. 문제에서 축에 평행한 직사각형이라 하였는데, 보다 더 일반적인 문제를 푸신 것 같습니다.

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