[코딩테스트연습] 코딩테스트 입문 > Lv.0 평행

2024. 3. 16. 14:02코딩 테스트/[프로그래머스] Java

문제 설명


문제 풀이

[try1]

임의의 두 점을 이었을 때, 두 직선이 서로 평행하거나 겹치는 경우 1을 return하는 문제이다.

음 .. 그렇다면 주어진 4개의 점을 모두 직선으로 만들어 보아야 한다는 것 같았다!

복잡해보이지만 우선 시도해보았다.

1. 4개의 점들 중 2개, 2개를 선택한다.

2. 2개의 기울기, 2개의 기울기를 비교한다.

3. 서로 같으면 1, 다르면 다른 직선과 비교를 이어나간다.

4. 이전에 선택했던 2개, 2개의 조합과는 다르게 선택한다. -> 이 부분이 문제인 것 같다!!!!!!!

 

class Solution {
    public int solution(int[][] dots) {
        /*
        (0,1)(2,3)
        (0,2)(1,3)
        (0,3)(1,2)
        사실 위 조합이 다 인것 같구만!
        */
        int line1 = ((dots[1][1]-dots[0][1])/(dots[1][0]-dots[0][0]));
        int line2 = ((dots[3][1]-dots[2][1])/(dots[3][0]-dots[2][0]));
        if(line1==line2) return 1;
        
        int line3 = ((dots[2][1]-dots[0][1])/(dots[2][0]-dots[0][0]));
        int line4 = ((dots[3][1]-dots[1][1])/(dots[3][0]-dots[1][0]));
        if(line3==line4) return 1;
        int line5 = ((dots[3][1]-dots[0][1])/(dots[3][0]-dots[0][0]));
        int line6 = ((dots[2][1]-dots[1][1])/(dots[2][0]-dots[1][0]));
        if(line5==line6) return 1;
        else return 0;

    }
}

 

근데 위 코드를 실행했을 때, 테스트2번에서 오류가 발생했다.

설마 나눗셈인데 int형으로 형변환되는 과정에서 숫자가 달라진 것인지 확인해보기 위해 다시 코드를 작성했다.

 

[try2]

그 결과 역시 데이터 타입이 문제였다!

class Solution {
    public int solution(int[][] dots) {

        double line1 = ((double)(dots[1][1]-dots[0][1])/(dots[1][0]-dots[0][0]));
        double line2 = ((double)(dots[3][1]-dots[2][1])/(dots[3][0]-dots[2][0]));
        if(line1==line2) return 1;
        
        double line3 = ((double)(dots[2][1]-dots[0][1])/(dots[2][0]-dots[0][0]));
        double line4 = ((double)(dots[3][1]-dots[1][1])/(dots[3][0]-dots[1][0]));
        if(line3==line4) return 1;
        
        double line5 = ((double)(dots[3][1]-dots[0][1])/(dots[3][0]-dots[0][0]));
        double line6 = ((double)(dots[2][1]-dots[1][1])/(dots[2][0]-dots[1][0]));
        if(line5==line6) return 1;
        

        else return 0;

    }
}

python으로 해결한 문제여서 1점은 못얻었다..!

 


다른 사람의 풀이 보기

1. 기울기를 구하는 함수를 따로 구분하여 실행하기