2023. 1. 2. 17:29ㆍcode/[프로그래머스] python
문제
점 네 개의 좌표를 담은 이차원 배열 dots가 다음과 같이 매개변수로 주어집니다.
- [[x1, y1], [x2, y2], [x3, y3], [x4, y4]]
주어진 네 개의 점을 두 개씩 이었을 때, 두 직선이 평행이 되는 경우가 있으면 1을 없으면 0을 return 하도록 solution 함수를 완성해보세요.
❗제한사항❗
- 0 ≤ dots의 원소 ≤ 100
- dots의 길이 = 4
- dots의 원소의 길이 = 2
- dots의 원소는 [x, y] 형태이며 x, y는 정수입니다.
- 서로 다른 두개 이상의 점이 겹치는 경우는 없습니다.
- 두 직선이 겹치는 경우(일치하는 경우)에도 1을 return 해주세요.
- 임의의 두 점을 이은 직선이 x축 또는 y축과 평행한 경우는 주어지지 않습니다.
입출력 예
입출력 예 설명
입출력 예 #1
- 점 [1, 4], [3, 8]을 잇고 [9, 2], [11, 6]를 이으면 두 선분은 평행합니다.
입출력 예 #2
- 점을 어떻게 연결해도 평행하지 않습니다.
✔풀이
def solution(dots):
answer = 0
dots.sort()
for num1 in range(4):
for num2 in range(num1+1,4):
dot1=dots[num1]
dot2=dots[num2]
dots.remove(dot1)
dots.remove(dot2)
dot3=dots[0]
dot4=dots[1]
if (dot1[0]-dot2[0])/(dot1[1]-dot2[1]) == (dot3[0]-dot4[0])/(dot3[1]-dot4[1]):
return 1
else:
dots.append(dot1)
dots.append(dot2)
dots.sort()
return 0
📝설명
문제에서는 dots의 점 2개씩 이었을 때, 평행이 된다면 1을, 평행이 되지 않는다면 0을 리턴하도록 했다.
입출력의 예를 보고 감을 잡았다. 점 2개의 x의 차와 y의 차가 서로 같으면 평행인건가?! 싶었다.
하지만, 조금만 더 생각해보면 x의 차에 y의 차를 나누어 기울기를 구할 수 있고, 이 기울기가 평행 여부를 판단하는 데에는 더 설득력 있다고 생각했다.
그렇게 짠 저의 코드를 소개합니다.
코드의 구성은 다음과 같다.
dots 순서대로 정렬 후 for문으로 dots 안의 점들을 2개씩 짝지어 선분을 이루었을 때, 기울기가 같다면 1을 리턴하도록 한다.
for문은 이중 for문으로 사용했다.
처음 for문에서는 반복범위를 4로 잡았다.
그 이유는 인덱스로 dots안의 dot를 뽑아낼 생각이기 떄문에, 0부터 나오도록 하기 위해서다.
두번째 for문에서는 num1이 중복되지 않도록 num1+1에서 4까지로 반복 범위를 잡았다.
정렬된 dots에서 num1,num2에 해당하는 dot를 꺼내고, dots에 remove를 통하여 num1,num2 인덱스를 삭제한다.
그러면 dots에는 2개의 dot이 남게 될텐데, 각각 dot3,dot4로 지정한다.
그러고 dot1과 dot2를 선분으로 이었다고 가정하여 기울기를 구하고, 마찬가지로 dot3과 dot4의 기울기도 구한다.
이 값이 같다면 바로 return 1을 하고, 다르다면 앞서 삭제했던 dot1과 dot2를 다시 추가한 후, sort()로 정렬한다.
👀느낀 점
: 남은 문제들 중에 난이도가 제일 높다고 기록되어 있어, 시작할 엄두가 나지 않았다.
막상 해보니 약간의 노가다이긴 했지만,, 걱정한만큼은 아니였던 것 같다.
숫자에 현혹되어 두려움부터 가지지는 말아야겠다.
💻 문제 출처
'code > [프로그래머스] python' 카테고리의 다른 글
[코딩 테스트 연습 입문] 유한소수 판별하기 (0) | 2023.01.03 |
---|---|
[코딩 테스트 연습 입문] 다음에 올 숫자 (0) | 2023.01.02 |
[코딩 테스트 연습 입문] 삼각형의 완성조건 (2) (0) | 2023.01.02 |
[코딩 테스트 연습 입문] 숨어있는 숫자의 덧셈 (2) (0) | 2023.01.02 |
[코딩 테스트 연습 입문] 저주의 숫자 3 (0) | 2023.01.01 |