CS/알고리즘

(알고리즘 공부)나머지 한 점

ri5 2021. 4. 21. 14:56

문제 설명

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

 

입출력 예

v result
[[1, 4], [3, 4], [3, 10]] [1, 10]
[[1, 1], [2, 2], [1, 2]] [2, 1]

풀이

def solution(v):
    answer = []
    xArr = []
    yArr = []
    for i in v:
        xArr.append(i[0])
        yArr.append(i[1])
        
    for i in range(0,3):
        if xArr.count(xArr[i]) == 1:
            answer.append(xArr[i])
            
    for i in range(0,3):       
        if yArr.count(yArr[i]) == 1:
                answer.append(yArr[i])
    
    print(answer)
    return answer

x축과 y축을 담은 list를 만들고 x축이 담긴 리스트를 돌면서 1개만 있는 x축을 찾아내고

y축도 동일하게 실행 시키고 y축도 찾아서 축을 추가 시켜준다.

반복문을 너무 많이써서 코드 자체가 쓸데 없이 길어진거 같다.

다른사람 풀이

from collections import Counter
def solution(v):
    # 총 좌표의 x와 y의 갯수는 같아야한다.
    result = []
    for i in zip(*v):
        y = Counter(i)
        result.extend([i for i in y if y[i] == 1])
    return result

for i in zip(*v)을 통해 i는 zip()형태로 x축만 가져오고 y축만 묶인다.

-ex

(1,3,3) (4,4,10)

y = Counter(i) 를 통해 

 

Counter(i)를 통해 x축과 y축이 루프를 돌때의 값형식
-ex

Counter({3: 2, 1: 1})
Counter({4: 2, 10: 1})

 

그중에 value가 1인 값만 체크해서 추가시킨다ion(v):