알고리즘 - 나머지한점

pyhoo·2020년 9월 11일
0

Algorithm

목록 보기
3/11
post-thumbnail

초기 접근

이 문제는 첨에 해쉬로 접근했는데(물론 그 방법으로도 풀 수 있겠지만) 나는 못풀었다. 해쉬로 접근하여 각 좌표의 값들이 같게 만드는 경우를 생각했지만, x좌표와 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

위의 풀이를 보고 파이썬 사랑이 폭발해버렸다💥💛

+추가) 다른 분의 pythonic한 좋은 코드가 있어 가져와봤다. 이분은 defaultdict를 이용하여 dictionary의 속성을 활용했다.

from collections import defaultdict

def solution(v):
    hash_x, hash_y = defaultdict(int), defaultdict(int)
    for x, y in v:
        hash_x[x] += 1
        hash_y[y] += 1
    x = [key for key, value in hash_x.items() if value == 1]
    y = [key for key, value in hash_y.items() if value == 1]
    return x + y 

배운 점

  1. zip() 메서드의 활용
  2. *(asterisk)를 활용하여 배열을 한 꺼풀 벗기고 zip()적용 -> 이건 일종의 테크닉이라 느껴짐
  3. Counter() 메서드 -> Counter는 dictionary 형태로 return 된다. 아마 이 점 때문에, 위 문제의 접근법이 해시라 생각한다.

0개의 댓글