[1스4코2파] # 170. LeetCode Pattern 1232. Check If It Is a Straight Line

gunny·2023년 6월 22일
0

코딩테스트

목록 보기
171/530

[1스4코2파] 1명의 스위프트 개발자와 4명의 코틀린 개발자, 2명의 파이썬 개발자코딩 테스트 서막 : 1스4코1파

Rule :

하루에 1문제씩 풀기.
한 문제당 30분씩은 고민하기.
왜 그렇게 풀었는지 공유하기.
하루라도 놓친다면 벌금은 1,000원
백준 플래티넘, 프로그래머스 4단계, 개발자 탈퇴 시 모임 탈퇴 가능

START :

[3코1파] 2023.01.04~ (170차)
[4코1파] 2023.01.13~ (162일차)
[1스4코1파] 2023.04.12~ (73일차)
[1스4코2파] 2023.05.03 ~ (52일차)

Today :

2023.06.22 [170일차]
LeetCode Patterns
1232. Check If It Is a Straight Line
https://leetcode.com/problems/check-if-it-is-a-straight-line/description/

1232. Check If It Is a Straight Line

https://leetcode.com/problems/check-if-it-is-a-straight-line/description/

문제 설명

(x,y) 좌표가 elements로 주어진 coordinates 리스트가 주어졌을 때, 각 원소들이 한 직선의 좌표에 해당하면 True
한 직선에 위치하지 않으면 False

문제 풀이 방법

직선의 방정식으로 풀면 됨
직선의 기울기를 일단 구함
예를 들어서 좌표가 2개 주어지면 (x1,y1), (x2,y2)
직선의 기울기는 (x1-x2)/(y1-y2) 혹은 (x2-x1)/(y2-y1)임

어차피 좌표가 2개 지어지면 두 점은 같은 직선일 수 밖에 없어서
base로 coordinates 길이가 2면 무조건 True를 반환하고

그이상이면 다음으로 주어지는 좌표를 x1, y1 와의 기울기를 구해서 기울기가 다르면 False를 내뱉어주면됨

예를 들어서 x3,y3가 주어지면

(x1-x3)/(y1-y3) 은 미리 그 앞단의 기울기와 같아야 하는 것임 (x1-x2)/(y1-y2)

(x1-x3)/(y1-y3) == (x1-x2)/(y1-y2) 이여야 하므로

조건은 (x1-x2)(y1-y3) == (y1-y2)(x1-x3) 여야 하는 것임 암튼 둘이 != 이면 False 인 것임
직선의 방정식으로 풀면 됨 굿

내 코드

class Solution:
    def checkStraightLine(self, coordinates: List[List[int]]) -> bool:
        if len(coordinates)==2:
            return True
        
        x1,y1 = coordinates[0]
        x2,y2 = coordinates[1]

        for i in range(2, len(coordinates)):
            x3,y3 = coordinates[i]

            if (x1-x2)*(y1-y3) != (y1-y2)*(x1-x3) :
                return False
        return True

증빙

여담

휴 ez~ 

profile
꿈꾸는 것도 개발처럼 깊게

0개의 댓글