[Programmers] 나머지 한 점
코딩테스트 데모 예제로 나왔던 문제이다.
문제
직사각형을 만드는데 필요한 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.
💛 개인 공부 기록용 블로그입니다. 👻