반응형

 

1. 문제

 

 

(x, y) 좌표로 구성된 배열 coordinates가 주어진다.

coordinates의 점들이 한 직선에 위치하는지 검사하면 되는 문제다.

 

 


 

2. 풀이 과정

 

두 점이 주어졌을 때 직선의 방정식을 이용해서 식을 세운 뒤 각 점들이 식을 성립시키는지 검사하면 된다.

배열의 첫 점과 끝점으로 식을 만든 뒤 배열을 순회하면서 식에 대입했을 때 식이 성립하는지 확인한다.

그런데 조금 귀찮은 부분이 있는데, 위 식은 기울기의 분모인 x2 - x1 가 0이 아니라는 조건이 붙기 때문에 코드 작성 시 예외처리가 조금 필요해진다.

그래서 분모를 이항시켜서 식에서 나눗셈을 없앤 뒤 코드에 적용하기로 했다.

보기 편하려고 x2 - x1과 y2 - y1을 각 t와 s로 치환하여 사용했다.

 

public class Solution {
    public bool CheckStraightLine(int[][] coordinates) {
        var length = coordinates.Length;
        var y1 = coordinates[0][1];
        var x1 = coordinates[0][0];
        var s = coordinates[length - 1][1] - y1;
        var t = coordinates[length - 1][0] - x1;

        for(int i = 1; i < length - 1; ++i)
        {
            if((coordinates[i][1] - y1) * t != (coordinates[i][0] - x1) * s)
            {
                return false;
            }
        }

        return true;
    }
}

 

 

 

반응형