알고리즘

완주하지 못한 선수

minseok__ 2024. 4. 18. 17:47

https://school.programmers.co.kr/learn/courses/30/lessons/42576?language=python3

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

 

 

 

 

def solution(participant, completion):
    hash_dict={}
    sumHash=0
    
    for p in participant:
        hash_dict[hash(p)]=p 
        sumHash+=hash(p)
        
    for c in completion:
        sumHash-=hash(c) 
        
    return hash_dict[sumHash]

 

 

위와 같이 간단히 풀 수 있지만 

 

해시에 대한 이해를 돕기 위해 직접 해시 함수 및 테이블을 를 구현해보았습니다.

 

class SimpleHashTable:
    def __init__(self, size):
        self.size = size
        self.table = [None] * self.size

    def simple_hash(self, key):
        # 문자열의 아스키 코드 합을 테이블 크기로 나눈 나머지
        return sum(ord(char) for char in key) % self.size

    def add(self, key):
        index = self.simple_hash(key)
        if self.table[index] is None:
            self.table[index] = []
        self.table[index].append(key)

    def remove(self, key):
        index = self.simple_hash(key)
        if self.table[index] is not None:
            try:
                self.table[index].remove(key)
                if not self.table[index]:
                    self.table[index] = None
            except ValueError:
                pass

    def find_non_completer(self):
        for entry in self.table:
            if entry is not None:
                return entry[0]  


def solution(participant, completion):
    hash_table = SimpleHashTable(100) 
    
    for p in participant:
        hash_table.add(p)
    for c in completion:
        hash_table.remove(c)

    return hash_table.find_non_completer()