이롭게 현명하게

[programmers - 120875] Lv0 평행 / Python 본문

알고리즘/programmers

[programmers - 120875] Lv0 평행 / Python

dev_y.h 2023. 8. 25. 18:12
728x90
반응형


문제

풀이

코드 설명

코드


 

[programmers - 120875] Lv0 평행 / Python


[🔗문제🔗]

[제한사항]

[입출력 예시]

번호 입력 출력
 1 [[1, 4], [9, 2], [3, 8], [11, 6]] 1
2 [[3, 5], [4, 1], [2, 4], [5, 10]] 0

[풀이]

브루트 포스 알고리즘

좌표를 통해 어떻게 평행하다는 것을 증명해야 할지 생각을 많이 했다.

선분이 평행하다는 것은 기울기가 같다는 것을 알게 되었다.

기울기 = y좌표 변화량 / x좌표 변화량

점은 무조건 4개이며, 2개씩 이었을 때의 선분의 조합은 4C2로 

이때 비교해야 하는 경우의 기울기는 4C2로 총 6개의 선분이 있다.

(1,2번의 점과 3,4번의 점), (1,3번의 점과 2,4번의 점), (1,4번의 점과 2,3의 점)

경우의 수는 이미 정해져 있기 때문에 다른 경우의 수를 계산할 필요가 없다.

그래서 반복문을 사용해서 풀어야 할 필요가 없다고 생각해 index로만 사용하는 방법으로 했다.

 


[코드 설명]

(dots[1][1]-dots[0][1])/(dots[1][0]-dots[0][0]) (y좌표 변화량) / (x좌표 변화량)으로 1번,2번 점의 기울기
(y2-y1)/(x2-x1)
(dots[3][1]-dots[2][1])/(dots[3][0]-dots[2][0]) (y좌표 변화량) / (x좌표 변화량)으로 3번,4번 점의 기울기
(y4-y3)/(x4-x3)
    if line[0]==line[1]:
        answer+=1
1,2번의 점과 3,4번의 점의 기울기를 비교
만약 line[0]과 line[1]이 같다면 answer값을 1 증가
(dots[2][1]-dots[0][1])/(dots[2][0]-dots[0][0]) (y좌표 변화량) / (x좌표 변화량)으로 1번,3번의 점의 기울기
(y3-y1)/(x3-x1)
(dots[3][1]-dots[1][1])/(dots[3][0]-dots[1][0]) (y좌표 변화량) / (x좌표 변화량)으로 2번,4번의 점의 기울기
(y4-y2)/(x4-x2)
    if line[0]==line[1]:
        answer+=1
1,3번의 점과 2,4번의 점의 기울기를 비교
만약 line[0]과 line[1]이 같다면 answer값을 1 증가
(dots[3][1]-dots[0][1])/(dots[3][0]-dots[0][0]) (y좌표 변화량) / (x좌표 변화량)으로 1번,4번의 점의 기울기
(y4-y1)/(x4-x1)
(dots[2][1]-dots[1][1])/(dots[2][0]-dots[1][0]) (y좌표 변화량) / (x좌표 변화량)으로 2번,3번의 점의 기울기
(y3-y2)/(x3-x2)
if line[0]==line[1]:
        answer+=1
1,4번의 점과 2,3의 점의 기울기를 비
만약 line[0]과 line[1]이 같다면 answer값을 1 증가
 return 1 if answer > 0 else 0 만약 answer값이 0보다 크면 1을 리턴 아니면 0을 리턴
파이썬 삼항연산자
[참일때] if [조건문]else[거짓일 때]

변수에 넣어서 해결하는 방법이 있었고, 식만 바로 대입해서 풀어도 됐는데 왜 리스트에 집어넣어서 풀어야겠다는 생각을 했는지 모르겠다.

<코드>

def solution(dots):
    answer = 0
    line = []
    line.append((dots[1][1]-dots[0][1])/(dots[1][0]-dots[0][0]))
    line.append((dots[3][1]-dots[2][1])/(dots[3][0]-dots[2][0]))
    if line[0]==line[1]:
        answer+=1
    line.clear()
    print(line)
    line.append((dots[2][1]-dots[0][1])/(dots[2][0]-dots[0][0]))
    line.append((dots[3][1]-dots[1][1])/(dots[3][0]-dots[1][0]))
    if line[0]==line[1]:
        answer+=1
    line.clear()

    line.append((dots[3][1]-dots[0][1])/(dots[3][0]-dots[0][0]))
    line.append((dots[2][1]-dots[1][1])/(dots[2][0]-dots[1][0]))
    if line[0]==line[1]:
        answer+=1
    line.clear()
    return 1 if answer > 0 else 0

잘못된 정보는 댓글에 남겨주시면 감사하겠습니다!😊

댓글과 좋아요는 큰 힘이 됩니다!

728x90
반응형
Comments