본문 바로가기
의지박약/기본기가없다

[python] Collection과 Dictionary와 Hash와 Key-Value

by 병진들 2021. 5. 13.

docs.python.org/3/library/collections.html#collections.Counter

 

collections — Container datatypes — Python 3.9.5 documentation

collections — Container datatypes Source code: Lib/collections/__init__.py This module implements specialized container datatypes providing alternatives to Python’s general purpose built-in containers, dict, list, set, and tuple. namedtuple() factory f

docs.python.org

# 이 글은 자세한 설명이아닌 그냥 깨닫고 끄적이는 일기입니다..

 

프로그래머스 문제 중 가장 쉬운 문제를 풀었는데, 나는 list로만 풀어서 50점 맞았다. 시간복잡도를 고려하지 않았기 때문에... 내가얼마나 멍청했는지 알고 관련 공부를 하기로 함

 

python에는 collection이라는 라이브러리안에 Counter라는 타입이 있다.

Counter는 간단하게 말하면 key-value 형식으로 문자열을 counting 해준다.

 

근데 그 쓰임새가 Python의 Dictionary와 비슷해서 잘 안썼던것 같다.(사실 잘 몰라서 안썼지 뭐)

dictionary는 해쉬타입에 더 다양한 데이터 타입이 들어갈 수 있지만(함수도 들어감..)

 

Counter는 말 그대로 counting에 목적을 두고 있기 때문에 value가 숫자임..


프로그래머스 문제 풀이1 Hash

List 만 사용한건 쪽팔려서 안올림

 

dictionary만 사용

def solution(participant, completion):
    sdict = {}
    for i in participant:
        if i in sdict:
            sdict[i] += 1
        else:
            sdict[i] = 1

    for i in completion:
        if sdict[i] == 1:
            del sdict[i]
        else:
            sdict[i] -= 1
    
    print((sdict.keys()))
    answer = list(sdict.keys())[0]
    return answer

List의 차집합 사용(근데 얜 같은 문자열 들어올때 처리 안됨)

def solution2(p,c):
    p_sub_c = [x for x in p if x not in c]
    return p_sub_c

 

Counter사용 - 프로그래머스 1등 정답..

def solution3(participant, completion):
    answer = collections.Counter(participant) - collections.Counter(completion)
    return list(answer.keys())[0]

ps. dictionary 형태이고 한명만 남는다는 가정이 있기 때문에 answer.pop() 해줘도 됨

댓글