본문 바로가기

Programming/Programmers

[프로그래머스/Python] 나머지 한 점(해시/비트연산자)

 

알고리즘 문제 해설 - 나머지 한 점

프로그래머스의 모의테스트는 프로그래머스의 시스템에 익숙해지기 위한 테스트이며, 문제 자체는 2018 1ST KAKAO BLIND RECRUITMENT와 전혀 관계없습니다. 다만 모의테스트의 풀이에 대한 요청이 있어

programmers.co.kr

프로그래머스의 데모테스트 문제

풀이 1. 해시

 

x좌표가 각각 2번씩 등장하여야 사각형을 이룰 수 있으므로 1번 등장하는 좌표를 찾아서 return하면 된다. 이건 y좌표도 마찬가지.

 

import collections
def solution(v):
    answer = []

    count_x = collections.defaultdict(int)
    count_y = collections.defaultdict(int)
    
    for i in v:
        count_x[i[0]]+=1
        count_y[i[1]]+=1
    
    for i in count_x:
        if count_x[i] == 1:
            answer.append(i)
            
    for i in count_y:
        if count_y[i] == 1:
            answer.append(i)

    return answer

 

import collections
def solution(v):
    answer = []
    for i in (zip(*v)):
        a = collections.Counter(i)
        for j in a:
            if a[j]==1:
                answer.append(j)
                
    return answer

풀이 2. XOR 연산

 

A xor A = 0

A xor A xor B = B

 

같은 값 두 개와 다른 값 한 개를 XOR 하면 다른 값 한 개가 나온다는 원리

 

def solution(v):
    answer = []
    
    answer.append(v[0][0]^v[1][0]^v[2][0])
    answer.append(v[0][1]^v[1][1]^v[2][1])
    
    return answer

 

def solution(v):
    answer = [0,0]
    
    for x,y in v:
        answer[0] ^= x
        answer[1] ^= y
        
    return answer