코딩테스트 연습에 공개된 문제는 (주)그렙이 저작권을 가지고 있습니다.
(지문 하단에 별도 저작권 표시 문제 제외)
코딩테스트 연습 문제의 지문, 테스트케이스, 풀이 등과 같은 정보는 비상업적, 비영리적 용도로 게시할 수 있습니다.

코딩테스트 정보


문제

점 네 개의 좌표를 담은 이차원 배열 dots가 다음과 같이 매개변수로 주어집니다.
[[x1, y1], [x2, y2], [x3, y3], [x4, y4]]
주어진 네 개의 점을 두 개씩 이었을 때, 두 직선이 평행이 되는 경우가 있으면 1을 없으면 0을 return 하도록 solution 함수를 완성해보세요.

제한사항

  • dots의 길이 = 4
  • dots의 원소는 [x, y] 형태이며 x, y는 정수입니다.
  • 0 ≤ x, y ≤ 100
  • 서로 다른 두개 이상의 점이 겹치는 경우는 없습니다.
  • 두 직선이 겹치는 경우(일치하는 경우)에도 1을 return 해주세요.
  • 임의의 두 점을 이은 직선이 x축 또는 y축과 평행한 경우는 주어지지 않습니다.

입출력 예

dots result
[[1, 4], [9, 2], [3, 8], [11, 6]] 1
[[3, 5], [4, 1], [2, 4], [5, 10]] 0


풀이 코드

풀이 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
def solution(dots):
  answer = 0

  for i in range(len(dots) - 2):

    inclin_origin = (dots[0][1] - dots[i + 1][1])/(dots[0][0] - dots[i+1][0])
    # 이을 점 두 개를 선택하고, 기울기 구하기

    dots_sub = dots.copy()
    dots_sub.remove(dots[0])
    dots_sub.remove(dots[i + 1])
    # 먼저 선택된 점 두 개를 제외한 점들(=나머지 점들) 리스트 만들기
    
    inclin_sub = (dots_sub[0][1] - dots_sub[1][1])/(dots_sub[0][0] - dots_sub[1][0])
    # 나머지 점들의 기울기 구하기

    if inclin_origin == inclin_sub:
      answer = max(1, answer)
  
  return answer


오답 풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
def solution(dots):
  answer = 0

  # 착안점
  # 두 개의 선이 평행이다 = 기울기가 같으면서 절편이 다르다.
  # 하지만 제한사항에 겹치는 점은 없으므로 절편은 신경쓸 필요가 없다.
  # 기울기 = 두 점의 (y2 - y1)/(x2 - x1)
  
  # 기울기를 담을 리스트 선언
  inclin_list = []
  
  # 점 네 개로 이을 수 있는 선의 모든 기울기를 구하는 for문
  # 총 나올 수 있는 선은 최대 6개
  for i, dot in enumerate(dots):
    if len(dots) - i >= 2:
      for j in range(len(dots) - 1 - i):
        x_sub = dots[i][0] - dots[- 1 - j][0]
        y_sub = dots[i][1] - dots[- 1 - j][1]
        inclin_list.append(y_sub/x_sub)
    else:
      pass
  
  # 기울기 중 중복되는 게 없으면 0, 있으면 1
  answer = 0 if len(inclin_list) == len(set(inclin_list)) else 1

  return answer


풀이 방식

■■■■ 문제 요약 ■■■■

네 개의 점이 주어지고, 이를 이용해 두 쌍의 선을 만든다.
선을 만들 때에는 모든 점이 이용되어야 한다.
모든 경우의 수를 실행했을 때 두 쌍의 선이 평행인 경우가 있다면 1을, 아니라면 0을 반환한다.

■■■■ 접근 방식 ■■■■

평행 = 기울기가 같다 라는 점을 이용했다.


리뷰

  • 본 문제는 지문이 난해하여 자칫 잘못 이해하면 “네 점을 이용해 만들 수 있는 모든 선 중 서로 평행인 것이 있는가?” 라는 질문으로 받아들여질 수 있다.
  • 나 또한 지문이 불완전하다고 생각하나,
  • 그 와중에도 지문을 잘 이해한 사람들이 있는 것을 보고, 잘 안풀리면 다른 시각으로 바라보는 것의 필요성을 느꼈다.