본문 바로가기
JAVA/프로그래머스

[Lv.0] 프로그래머스 - 평행 : Java

by ♡˖GYURI˖♡ 2024. 6. 21.
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

이해하기

너무 기본이지만 기울기와 평행 조건부터 다시 정리하였다.

 

기울기 구하는 법 어렵지 않아요!

안녕하세요, 홍재룡수학학원입니다. 수평선 또는 수평면에 대한 기울어짐 정도를 나타내는 기울기! 기울기 ...

blog.naver.com

 

 

두 직선의 위치관계 - 평행, 일치, 수직

두 직선의 위치관계는 중학교 1학년 때 두 직선의 위치관계에서 공부했어요. 이때는 그냥 위치 관계의 종류에 대해서만 공부했죠. 평행, 일치, 수직, 한 점에서 만나는 경우요. 이 글에서는 직선

mathbang.net

 

처음에 잘못 생각하였던 점이 {{1, 4}, {9, 2}, {3, 8}, {11, 6}}일 때, 이중 for문을 돌며 {1, 4}와 {9, 2}의 기울기, {1, 4}와 {3, 8}의 기울기, {1, 4}와 {11, 6}의 기울기, ... {3, 8}과 {11, 6}의 기울기와 같이 가능한 경우의 수를 전부 Map에 저장하려고 했다는 점이다.

다시 문제를 살펴보면 {1, 4}와 {9, 2}를 잇는다면, 나머지 {3, 8}과 {11, 6}이 이어져야 하는데, 이 부분을 놓친 것이다.

 

 

문제풀이

class Solution {
    public int solution(int[][] dots) {
        int answer = 0;
        
        for (int i = 0; i < dots.length - 1; i++) {
            for (int j = i + 1; j < dots.length; j++) {
                int num1 = i;
                int num2 = j;
                
                int num3 = -1;
                int num4 = -1;
                
                for (int k = 0; k < dots.length; k++) {
                    if (num3 == -1 && k != num1 && k != num2) {
                        num3 = k;
                    }
                    
                    if (num3 != -1 && k != num1 && k != num2) {
                        num4 = k;
                    }
                }
                
                double cal1 = (dots[num1][1] - dots[num2][1] * 1.0) / (dots[num1][0] - dots[num2][0]);
                double cal2 = (dots[num3][1] - dots[num4][1] * 1.0) / (dots[num3][0] - dots[num4][0]);
                
                if (cal1 == cal2) {
                    answer = 1;
                }
            }
        }
        
        return answer;
    }
}

 

코드가 너무 지저분하지만 인덱스 값을 가지고 4개의 점을 각각 2개씩 나누어 서로의 기울기를 비교한 후, 같은 경우가 있다면 answer에 1을 넣어주었다.