-
프로그래머스 - 직사각형 좌표 구하기코테문제풀기 2021. 3. 19. 00:13
- 문제
2017년 카카오 코테 문제(?)
직사각형을 만드는 데 필요한 4개의 점 중 3개의 좌표가 주어질 때, 나머지 한 점의 좌표를 구하려고 합니다. 점 3개의 좌표가 들어있는 배열 v가 매개변수로 주어질 때, 직사각형을 만드는 데 필요한 나머지 한 점의 좌표를 return 하도록 solution 함수를 완성해주세요. 단, 직사각형의 각 변은 x축, y축에 평행하며, 반드시 직사각형을 만들 수 있는 경우만 입력으로 주어집니다.
제한사항
▶ v는 세 점의 좌표가 들어있는 2차원 배열입니다.
▶ v의 각 원소는 점의 좌표를 나타내며, 좌표는 [x축 좌표, y축 좌표] 순으로 주어집니다.
▶ 좌표값은 1 이상 10억 이하의 자연수입니다.
▶ 직사각형을 만드는 데 필요한 나머지 한 점의 좌표를 [x축 좌표, y축 좌표] 순으로 담아 return 해주세요.- 소요시간
15분 내외
- 코드
from itertools import combinations as c from collections import Counter def solution(v): answer = [] comb = list( c(v,2) ) # 대각선 좌표 조합 O(N) diag = None for _set in comb: if _set[0][0] != _set[1][0] and _set[0][1] != _set[1][1]: diag = list(_set) # 대각 좌표 -> 서로 x / y 좌표가 겹치지 않음 break # v 에서 대각 좌표에 들어있지 않은 좌표 구함 other_p = [ var for var in v if var not in diag] _x = sum(map(lambda x: x[0], v)) - 2* other_p[0][0] _y = sum(map(lambda x: x[1], v)) - 2* other_p[0][1] return [_x, _y]
- 발상
▶ 좌표 값이 대단히 큼(1억), 효율적인 "수학적인 방법"이 있을 것이라고 생각
▶ 3좌표가 무조건 주어지기 때문에, combination / list comprehension 이용한
나머지 target 좌표를 선택하는 것 까지 구현한 후,
수학 공식을 통해 좌표를 구하면 됨반응형'코테문제풀기' 카테고리의 다른 글
내 코테 문제 github / notion link (0) 2021.04.22 프로그래머스 - 디스크 컨트롤 (0) 2021.03.17