1 분 소요

코딩테스트 데모 예제로 나왔던 문제이다.

문제

직사각형을 만드는데 필요한 4개의 점 중 3개의 좌표가 주어질 때, 나머지 한 점의 좌표를 구하려고 합니다. 점 3개의 좌표가 들어있는 배열 v가 매개변수로 주어질 때, 직사각형을 만드는데 필요한 나머지 한 점의 좌표를 return 하도록 solution 함수를 완성해주세요.

입출력

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

Solution 1

def solution(v): 
    # x, y좌표가 들어갈 리스트 
    x = [] 
    y = [] 
    answer = [] 

    # 이중배열 순회 
    for arr in v:
        if arr[0] not in x: 
            x.append(arr[0]) 
        else: 
            x.remove(arr[0]) 

        if arr[1] not in y: 
            y.append(arr[1]) 
        else: 
            y.remove(arr[1]) 

    # 최종적으로 x,y에 남는건 중복이 없는 좌표
    answer = x + y 

    return answer
  • x와 y좌표들을 각각 리스트로 만들어두고, 2차원 배열 v를 하나씩 순회한다.
  • 이때, 리스트에 들어있지 않은 좌표라면 삽입하고, 이미 들어있는 값이면 제거한다.
  • 그러면 최종적으로 중복값이 없는 하나의 좌표만 각각 남아있게 된다.
  • 예를들어 x=[1,3], y=[10] 이라면, x+y는 [1,3,10]이 된다.

Solution 2

def solution(v): 
    # a ^ a = 0
    # a ^ a ^ b = b
    x = v[0][0] ^ v[1][0] ^ v[2][0] 
    y = v[0][1] ^ v[1][1] ^ v[2][1] 

    return [x,y]
  • 같은 값 2개와 다른 값 1개를 xor 연산시키면 다른 값 1개가 반환된다는 원리이다.

끄적

  • 비트연산자 xor를 사용할 생각은 못했는데 가장 참신하고 간단한 풀이인 것 같다. 👍

Ref.

JEEYOUNG.ME



💛 개인 공부 기록용 블로그입니다. 👻

맨 위로 이동하기