728x90

 

- 오늘의  학습 키워드 : 해시(Hash)

- 문제 링크 :  https://school.programmers.co.kr/learn/courses/30/lessons/42576?language=python3

 

프로그래머스

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

programmers.co.kr

- 제출한 코드  

def solution(participant, completion):
    answer = ''
    sum = 0
    hashDict = {}
    
    for people in participant:
        hashDict[hash(people)] = people #hash값:people , 3.3부터는 보안을 위해 랜덤생성
        sum += hash(people)
    for people2 in completion:
        sum -= hash(people2)   
    
    
    return hashDict[sum]

 

오늘의 회고

오늘부터는 본격적으로 알고리즘에 입문한 해시 문제...

후... 시간복잡도도 생각해야하고 우선 해시에 대한 정의를 알아야될 것 같아서 티스토리를 참고했다

https://mangkyu.tistory.com/102

 

[자료구조] 해시테이블(HashTable)이란?

1. 해시테이블(HashTable)이란? [ HashTable(해시테이블)이란? ] 해시 테이블은 (Key, Value)로 데이터를 저장하는 자료구조 중 하나로 빠르게 데이터를 검색할 수 있는 자료구조이다. 해시 테이블이 빠른

mangkyu.tistory.com

 

이 분의 티스토리 블로그가 알기 쉽게 잘 정의 되어있음

 

해시를 모를때는

 

 

이렇게 풀어서 정답은 맞지만, 효율성에서 빡구먹어서 아 빼박 해시로 풀어야겠구만 해서 다시 수정했다.

 

def solution(participant, completion): #함수 solution 선언
    answer = '' #변수선언
    sum = 0
    hashDict = {} #해시딕셔너리 선언
    
    for people in participant: 
        hashDict[hash(people)] = people #hash값:people , 3.3부터는 보안을 위해 랜덤생성
        sum += hash(people)  
    for people2 in completion:
        sum -= hash(people2)   
    
    
    return hashDict[sum]

================================================================

다시 코드를 보면

for문으로 participant의 요소값을 hashdict 딕셔너리에 넣고 해쉬값도 넣어 {key:value} 로 만든다

그리고 요소값에대한 해쉬값을 합산한다.

 

그리고 완주자에 대한 사람들을 아까 더한 합산값에서 뺴고

남은 사람들을 리턴하면 끝!

 

**

여기서 궁금했던 점은 hash값이 중복될 수 있다는 글들을 봐서

이거를 선택하는 근거가 뭔가 찾아봤는데

 

 

 

해쉬값은 객체의 데이터에 기반하여 고유한 정수를 반환하는거지만, 파이썬 3.3이후로부터는 보안상의 이유로 랜덤으로 나오게 변경했다고해서 실제로 실행을 몇번 해봤는데 할때마다 다른 값들이 나옴 ㅋㅋ 신기하네.

 

빨리 다음 해시 문제도 풀어보고싶다.

728x90

+ Recent posts