반응형
250x250
Notice
Recent Posts
Recent Comments
Link
이롭게 현명하게
[programmers - 120875] Lv0 평행 / Python 본문
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
잘못된 정보는 댓글에 남겨주시면 감사하겠습니다!😊
댓글과 좋아요는 큰 힘이 됩니다!
![](https://t1.daumcdn.net/keditor/emoticon/friends1/large/007.gif)
728x90
반응형
'알고리즘 > programmers' 카테고리의 다른 글
[programmers - 120956] Lv0 옹알이 (1) / Python (0) | 2023.08.28 |
---|---|
[programmers - 120876] Lv0 겹치는 선분의 길이/ Python (0) | 2023.08.24 |
[programmers - 120866] Lv0 안전지대 / Python (0) | 2023.08.19 |
Comments