본문 바로가기
  • Thank you for visiting.....
프로그래머스 문제

[JAVA/프로그래머스] 평행

by HyunSoooo 2024. 2. 20.
728x90

 

 

finding-parallel-lines-algorithm-java-explanation

 

주어진 문제는 네 개의 점이 이차원 배열로 주어지고, 이 점들을 이용해 두 직선이 평행한지 여부를 판별하는 것 입니다. 문제의 핵심은 주어진 네 점으로 가능한 모든 직선 조합의 기울기를 계산하고, 이 기울기들이 서로 같은지 비교하여 평행한 경우를 찾는 것입니다.

 

처음에는 기울기를 계산을 이용하여 HashSet 을 이용하여 같은 기울기가 나오면 1을 리턴 하도록 작성하였는데 소수점을 set 에서 저장하거나 차이를 비교할때 소수점 자리수로 인해 실패를 나오는 경우가 있었다...

 

import java.util.HashSet;
class Solution {
    public int solution(int[][] dots) {
        // 기울기를 계산하여 평행한 직선이 있는지 확인
        double slope1 = calculateSlope(dots[0], dots[1]);
        double slope2 = calculateSlope(dots[2], dots[3]);
        double slope3 = calculateSlope(dots[0], dots[2]);
        double slope4 = calculateSlope(dots[1], dots[3]);
        double slope5 = calculateSlope(dots[0], dots[3]);
        double slope6 = calculateSlope(dots[1], dots[2]);

        // 평행한 직선의 기울기가 있는 경우 1 반환
        if (slope1 == slope2 || slope3 == slope4 || slope5 == slope6) {
            return 1;
        }
        // 평행한 직선이 없는 경우 0 반환
        return 0;
    }

    // 두 점 사이의 기울기를 계산하는 메소드
    private double calculateSlope(int[] dot1, int[] dot2) {
        // 수직인 경우를 대비해 분모가 0이면 Double.MAX_VALUE 반환
        if (dot2[0] - dot1[0] == 0) {
            return Double.MAX_VALUE;
        }
        // 기울기 계산
        return (double) (dot2[1] - dot1[1]) / (dot2[0] - dot1[0]);
    }
}

메소드를 통해 두 점 사이의 기울기를 계산하고 서로 비교하여 평행한 직선이 있는지 확인 하는 것 입니다.

분모가 0인 경우(수직인 경우) 'Double.MAX_VALUE' 를 반환하여 처리 합니다 '0' 으로 처리할 경우 중복으로 값이 나올 수 있어서 유니크한 값으로 하는게 좋습니다.

 

 

728x90