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
'프로그래머스 문제' 카테고리의 다른 글
[JAVA/프로그래머스] 순위 (2) | 2024.02.27 |
---|---|
[JAVA/프로그래머스]두 정수의 짝꿍 찾기: 알고리즘 문제 해결 방법 (0) | 2024.02.22 |
[JAVA/프로그래머스] 대충 만든 자판 (0) | 2024.02.02 |
[JAVA/프로그래머스] 덧칠하기 (1) | 2024.01.31 |
[JAVA/프로그래머스] 신고 결과 받기 (0) | 2024.01.30 |