공부 기록
[5주차] 해시 본문
- 해시 : 데이터를 다루는 기법 중 하나로 검색과 저장이 아주 유용한 구조, key와 value 쌍으로 데이터를 저장함
- 해시의 구조 : key, 해시함수, 해시테이블로 이루어져있으며 해시 함수에 의해 각 key값이 숫자로 바뀌고 이 값들은 해시테이블에서 인덱스값으로 사용하여 해시테이블에 값을 저장함
- 해시함수 : 임의의 길이를 갖는 메시지를 입력받아 고정된 길이의 해시값을 출력하는 함수
- 해시 구현 방법 : 딕셔너리 활용(배열과 집합은 key로 사용할 수 없음)
<딕셔너리 삽입>
hash = dict()
hash[1] = 'apple'
hash['banana'] = 3
hash[(4, 5)] = [1, 2, 3]
hash[10] = dict({1:'a', 2:'b'})
<딕셔너리 수정>
hash[1] = 'melon'
hash['banana'] = 10
<딕셔너리 값 추출>
hash.pop(1) -----------> 'melon'
hash.pop('banana') -----> 10
hash.pop((4, 5)) -------> [1, 2, 3]
hash.pop(10) -----------> {1:'a', 2:'b'}
<딕셔너리 값 추출하지 않고 삭제>
del hash[1]
del hash['banana']
del hash[(4, 5)]
del hash[10]
- 딕셔너리 활용
<딕셔너리 루프>
- hash.keys() : 딕셔너리가 갖고 있는 모든 키값을 리스트와 유사한 형태로 반환해주는 함수
- hash.values() : 딕셔너리가 갖고 있는 모든 value값을 리스트와 유사한 형태로 반환해주는 함수
- hash.items() : 딕셔너리가 갖고 있는 모든 키와 value값을 튜플 리스트 형태로 반환해주는 함수
<딕셔너리 정렬>
- sorted() : 언제나 리스트 타입을 반환
hash = dict({1:10, 3:12, 5:7, 7:6, 4:5})
# 오름차순
sorted(hash.keys(), key=lambda x:x) --------> [1, 3, 4, 5, 7] 키값 정렬
sorted(hash.values(), key=lambda x:x) ------> [5, 6, 7, 10, 12] value값 정렬
sorted(hash.items(), key=lambda x:x) -------> [(1, 10), (3, 12), (4, 5), (5, 7), (7, 6)]
# 내림차순
sorted(hash.keys(), key=lambda x:-x) --------> [7, 5, 4, 3, 1] 키값 정렬
sorted(hash.values(), key=lambda x:-x) ------> [12, 10, 7, 6, 5] value값 정렬
sorted(hash.items(), key=lambda x:-x) -------> error : lambda함수에서 추출된 x는 튜플 타입으로 -를 붙일 수 없음
sorted(hash.items(), key=lambda x:-x[1]) ----> [(3, 12), (1, 10), (5, 7), (7, 6), (4,5)] value값에 의한 내림차순 정렬
#lambda x : _______________
1) (x[0], x[1]) : key 오름차순, value 오름차순
2) (-x[0], x[1]) : key 내림차순, value 오름차순
3) (x[1], x[0]) : value 오름차순, key 오름차순
'코딩테스트 > 자료구조' 카테고리의 다른 글
[7주차] 동적계획법 (0) | 2021.09.26 |
---|---|
[6주차] 재귀함수 (0) | 2021.08.26 |
[4주차] 진법 변환과 비트연산 (0) | 2021.08.22 |
[3주차] BFS/DFS (0) | 2021.08.02 |
[2주차] 완전 탐색 / 이분 탐색 (0) | 2021.07.26 |
Comments