문제: 나머지 한 점

data_hamster·2023년 4월 13일
0

문제 설명
직사각형을 만드는 데 필요한 4개의 점 중 3개의 좌표가 주어질 때, 나머지 한 점의 좌표를 구하려고 합니다. 점 3개의 좌표가 들어있는 배열 v가 매개변수로 주어질 때, 직사각형을 만드는 데 필요한 나머지 한 점의 좌표를 return 하도록 solution 함수를 완성해주세요. 단, 직사각형의 각 변은 x축, y축에 평행하며, 반드시 직사각형을 만들 수 있는 경우만 입력으로 주어집니다.

제한사항
v는 세 점의 좌표가 들어있는 2차원 배열입니다.
v의 각 원소는 점의 좌표를 나타내며, 좌표는 [x축 좌표, y축 좌표] 순으로 주어집니다.
좌표값은 1 이상 10억 이하의 자연수입니다.
직사각형을 만드는 데 필요한 나머지 한 점의 좌표를 [x축 좌표, y축 좌표] 순으로 담아 return 해주세요.

입출력 예 설명
입출력 예 #1
세 점이 [1, 4], [3, 4], [3, 10] 위치에 있을 때, [1, 10]에 점이 위치하면 직사각형이 됩니다.

입출력 예 #2
세 점이 [1, 1], [2, 2], [1, 2] 위치에 있을 때, [2, 1]에 점이 위치하면 직사각형이 됩니다.

아이디어

  • 직사각형의 좌표는, 각 좌표의 갯수가 쌍으로 생성된다. 따라서 갯수가 1개인 숫자의 값을 리턴한다.
  • x_dict{} y_dict{} 생성, 각 좌표의 갯수를 세준다
  • for 반복문 생성
  • 좌표의 갯수를 센다.
  • list comprehension으로 dict의 value 값 중 최대값을 가지는 key를 반환

내 풀이

def solution(v):
    x_dict = {}
    y_dict = {}
    for values in v:
        if values[0] not in x_dict:
            x_dict[values[0]] = 1
        else:
            x_dict[values[0]] += 1
        if values[1] not in y_dict:
            y_dict[values[1]] = 1
        else:
            y_dict[values[1]] += 1
    answer = []
    answer += [k for k,v in x_dict.items() if min(x_dict.values()) == v]
    answer += [k for k,v in y_dict.items() if min(y_dict.values()) == v]
    return answer

어려웠던 점

혼공파 파이썬에서 딕셔너리 때 썼던 리스트 컴프리헨션 문제가 나왔다.
생각이 나지 않아서 다시 책을 뒤져보며 구현했다.

if min(y_dict.values()) == v

컴프리헨션 조건문이 아직도 잘 이해가 되지 않는다. 이해한 바로는 if문을 수행하기 전에 for 이용하여 k, v 튜플 쌍의 리스트를 생성한 뒤, min 함수에서 최소 값이 v 와 일치하는 값들의 튜플 쌍으로 추려낸 뒤, 마지막으로 k 값만 리턴한다. 이다.

profile
반갑습니다 햄스터 좋아합니다

0개의 댓글