자바 알고리즘 문제

평행

쿠키키키키 2024. 4. 13. 17:43
반응형

점 네 개의 좌표를 담은 이차원 배열  dots가 다음과 같이 매개변수로 주어집니다. [[x1, y1], [x2, y2], [x3, y3], [x4, y4]] 주어진 네 개의 점을 두 개씩 이었을 때, 두 직선이 평행이 되는 경우가 있으면 1을 없으면 0을 return 하도록 solution 함수를 완성해보세요.

 

import java.util.Arrays;


class Solution {
    public int solution(int[][] dots) {
        // 평행 하다는건 기울기 가 같다는거
        // 나올수 있는 선분의 개수는 6개
        // 일단 6개의 기울기 변수를 만들어보자

        //[a-b, c-d],[a-c, b-d],[a-d, b-c] 이런거만 된다네
        //힌트를 얻음  아니문제가 좀 ;;
        int answer = 0;
        double[] angle =new double[6];
        angle[0]=getAngle(dots[0],dots[1]);
        angle[1]=getAngle(dots[0],dots[2]);
        angle[2]=getAngle(dots[0],dots[3]);
        angle[3]=getAngle(dots[1],dots[2]);
        angle[4]=getAngle(dots[1],dots[3]);
        angle[5]=getAngle(dots[2],dots[3]);
        //결국 0,5 번을 비교 , 1,4번을 비교 2, 3번을 비교 하면됨

        if(angle[0]==angle[5] || angle[1]==angle[4] || angle[2]==angle[3]) {
            answer=1;

        }

        System.out.println(Arrays.toString(angle));

        return answer;
    }

    public double getAngle(int[] a,int[] b){

        return (double)(a[1]-b[1])/(double)(a[0]-b[0]);
    }
}

 

 

아 문제 설명이 좀 헷갈렸다.  2개를 이어서 직선이 나오는 경우 6가지를 다비교해주는지 알았는데

그게 아니고 4 개 좌표중 2개씩 이어서 한번 비교해주고 다시 2개씩 이어서 비교해줘서 

총 3번만 비교해주면 되는거였다.  

암튼 그러고 풀이는 간단하게 기울기를 구하는 함수만 따로 만들어주어서  기울기 배열을 만들어주고

if 문으로 비교해주면 끝이다 .

반응형