1. 문제 설명
점 네 개의 좌표를 담은 이차원 배열 dots가 다음과 같이 매개변수로 주어집니다.
- [[x1, y1], [x2, y2], [x3, y3], [x4, y4]]
주어진 네 개의 점을 두 개씩 이었을 때, 두 직선이 평행이 되는 경우가 있으면 1을 없으면 0을 return 하도록 solution 함수를 완성해보세요.
2. 제한 사항
- 0 ≤ dots의 원소 ≤ 100
- dots의 길이 = 4
- dots의 원소의 길이 = 2
- dots의 원소는 [x, y] 형태이며 x, y는 정수입니다.
- 서로 다른 두개 이상의 점이 겹치는 경우는 없습니다.
- 두 직선이 겹치는 경우(일치하는 경우)에도 1을 return 해주세요.
- 임의의 두 점을 이은 직선이 x축 또는 y축과 평행한 경우는 주어지지 않습니다.
3. 입출력 예입출력 예

4. 해결 방향
해당 문제가 주어졌을 때, 기울기에 대한 경우의 수를 통해 해결해야 되는 문제라는 생각이 들었다. 구체적인 해결 과정은 아래와 같다.
- 기울기의 모든 경우의 수를 리스트에 담기 (다만 동일한 선이 이중으로 담기지 않도록 주의)
- 리스트 안에 중복이 있는 지 여부 확인하기
5. 해결 코드 (결론)
def solution(dots):
lines = []
for x in range(len(dots)-1):
for y in range(len(dots)-1):
if x+y+1 < 4:
lines.append((dots[x][1] - dots[x+y+1][1])/(dots[x][0] - dots[x+y+1][0]))
if len(lines) != len(list(set(lines))):
return 1
else:
return 0
6. 해결 과정 속 얻은 내용 정리
1) 기울기 구하는 방법 정리
: 리스트 안에 리스트가 정리되어 있는 형태로 기울기 (y간 거리/ x간 거리)를 아래와 같이 구할 수 있음을 알 수 있었다.

2) 반복할 구간을 지정하기 위해 경우의 수 일부 나열
: 보다 정확하게 함수를 작성하기 위해 일부 경우의 수를 나열해봤다. 이 과정을 통해 식을 나열해보는 과정에서 반복해야 하는 구간이 2개라는 사실과 각각 0~3, 1~4 구간으로 반복해야 됨을 생각해볼 수 있었다.

3) 주의점 확인 후 식 정리
: 리스트를 추가함에 있어 아래와 같은 이유로 선을 중복되지 않게 반복문을 작성하는 것이 중요하다는 것을 알 수 있었다.
- 1번 점-> 2번 점과 2번 점 -> 1번 점의 기울기는 같기 때문에 중복이 항상 발생하게 되어 제거해야 함
- 동일한 점 안에 기울기 값은 계산이 되지 않으 뿐더러 (0/0) 모든 점이 같게 나오므로 제거해야 함
그에 따라 if 조건문을 추가적으로 더해 동일한 점과 이전에 작업이 진행된 점들은 빼고 리스트에 추가시킬 수 있도록 식을 정리했다.

4) 중복 여부 확인
: 리스트가 set 형태로 변환 시에 중복되는 인자들이 제거되는 특징을 이용해 해당 리스트 내에 중복 인자가 있는 지 확인하고 문제에서 원하는 원하는 값을 리턴하여 마무리했다.

'python > python_문제풀이' 카테고리의 다른 글
| 프로그래머스_옹알이(1) (0) | 2023.01.03 |
|---|---|
| python 문제풀이_이중 반복문을 활용한 구구단 풀이 (0) | 2022.12.08 |
| python 문제풀이_환율 적용해 원화 가격 도출하기 (0) | 2022.12.08 |