2021. 1. 16. 02:14ใ๐ Algorithm/๐ Python ๋ฌธ๋ฒ
ํ์ด์ฌ์์ ํด์(Hash)๋ ์ด๋ป๊ฒ ๊ตฌํํ ์ ์์๊น์!?
ํ์ด์ฌ์์๋ Dictionary ๋ผ๋ ์๋ฃ๊ตฌ์กฐ๋ฅผ ํตํด ํด์๋ฅผ ์ ๊ณตํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ Dictionary๋ dictํด๋์ค์ ๊ตฌํ๋์ด์์ต๋๋ค!
ํด์ ์ธ์ ์ฌ์ฉํ๋ฉด ์ข์๊น?!
ํด์๋ฅผ ์ฌ์ฉํ๋ฉด ์ข์ ๋๋ฅผ ์๊ฐํด๋๋ฆฌ๊ณ ์ ํฉ๋๋ค : )
1. ๋ฆฌ์คํธ๋ฅผ ์ธ ์ ์์ ๋
๋ฆฌ์คํธ๋ ์ซ์ ์ธ๋ฑ์ค๋ฅผ ์ด์ฉํ์ฌ ์์์ ์ ๊ทผํ๋๋ฐ ์ฆ list[1]์ ๊ฐ๋ฅํ์ง๋ง list['a']๋ ๋ถ๊ฐ๋ฅํฉ๋๋ค.
์ธ๋ฑ์ค ๊ฐ์ ์ซ์๊ฐ ์๋ ๋ค๋ฅธ ๊ฐ '๋ฌธ์์ด, ํํ'์ ์ฌ์ฉํ๋ ค๊ณ ํ ๋ ๋์ ๋๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ์ข์ต๋๋ค.
2. ๋น ๋ฅธ ์ ๊ทผ / ํ์์ด ํ์ํ ๋
์๋์์ ํ๋ก ์ ๋ฆฌํด ๋ณด์ฌ๋๋ฆด ์์ ์ด์ง๋ง, ๋์ ๋๋ฆฌ ํจ์์ ์๊ฐ๋ณต์ก๋๋ ๋๋ถ๋ถ O(1)์ด๋ฏ๋ก ์์ฃผ ๋น ๋ฅธ ์๋ฃ๊ตฌ์กฐ ์ ๋๋ค!
3. ์ง๊ณ๊ฐ ํ์ํ ๋
์์์ ๊ฐ์๋ฅผ ์ธ๋ ๋ฌธ์ ๋ ์ฝ๋ฉ ํ ์คํธ์์ ๋ง์ด ์ถ์ ๋๋ ๋ฌธ์ ์ ๋๋ค. ์ด๋ ํด์์, collections ๋ชจ๋์ Counter ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ฉด ์์ฃผ ๋น ๋ฅด๊ฒ ๋ฌธ์ ๋ฅผ ํธ์ค ์ ์์ ๊ฒ์ ๋๋ค.
๋์ ๋๋ฆฌ์ ๋ฆฌ์คํธ์ ์๊ฐ ๋ณต์ก๋ ์ฐจ์ด
์๊น ์์์ ๋์ ๋๋ฆฌ์ ์๊ฐ ๋ณต์ก๋๋ ๋๋ถ๋ถ O(1)์ ๊ฐ๋๋ค๊ณ ๋ง์๋๋ ธ๋๋ฐ ๋ฆฌ์คํธ์ ์๊ฐ๋ณต์ก๋๋ฅผ ๋น๊ตํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
Operation | Dictionary | List |
Get Item | O(1) | O(1) |
Insert Item | O(1) | O(1) ~ O(N) |
Update Item | O(1) | O(1) |
Delete Item | O(1) | O(1) ~ O(N) |
Search Item | O(1) | O(N) |
List์ ๋นํด Dictionary๊ฐ ๋งค์ฐ ๋น ๋ฅธ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ๋ ๊ฒ์ ๋ณด์ค ์ ์์ต๋๋ค.
์ฆ , ์์๋ฅผ ๋ฃ๊ฑฐ๋ ์ญ์ , ์ฐพ๋ ์ผ์ด ๋ง์ ๋์๋ ๋์ ๋๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค
โป ํ์ด์ฌ 3.7 ์ด์๋ถํฐ ๋์ ๋๋ฆฌ๋ ์์๊ฐ ๋ค์ด์จ ์์๋ฅผ ๋ณด์ฅํฉ๋๋ค. ๋ฐ๋ฉด, 3.7 ๋ฏธ๋ง์ ์์๋ฅผ ๋ณด์ฅํ์ง ์์ต๋๋ค. ๋์ ๋๋ฆฌ๋ฅผ ์ด์ฉํด ๋ฌธ์ ๋ฅผ ํ ๋์๋ ๋ฒ์ ์ ์ ์ํ์ธ์.
Dictionary ์ฌ์ฉ๋ฒ
๐ Init
{}๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ dictํจ์ ํธ์ถ ์ ๋น ๋์ ๋๋ฆฌ๋ฅผ ์ ์ธํ ์ ์์ต๋๋ค.
key - value ์์ ๊ฐ๋ dictionary ์ ์ธ๋ ๋ฐ๋ก ๊ฐ๋ฅํฉ๋๋ค.
# ๋น๋์
๋๋ฆฌ ์์ฑ
dict1 = {} # {}
dict2 = dict() # {}
# ํน์ key-value์์ ๊ฐ์ง dictionary ์ ์ธ
Dog = {
'name': '๋๋์ด',
'weight': 4,
'height': 100,
}
'''
{'height': 100, 'name': '๋๋์ด', 'weight': 4}
'''
# dictionary๋ฅผ value๋ก ๊ฐ์ง๋ dictionary ์ ์ธ
Animals = {
'Dog': {
'name': '๋๋์ด',
'age': '5'
},
'Cat': {
'name': '์ผ์น์ด',
'weight': 3
}
}
'''
{ 'Dog': { 'name': '๋๋์ด', 'age': '5'},
'Cat': {'name': '์ผ์น์ด','weight': 3 }}
'''
๐ Get
Dictionary์์ ์์๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฐฉ๋ฒ์ ๋๊ฐ์ง ์ ๋๋ค.
1. [] ์ฌ์ฉํ๊ธฐ
2. get ๋ฉ์๋ ์ด์ฉํ๊ธฐ
get ๋ฉ์๋๋ get(key,x) ๋ก ์ฌ์ฉํ์ค ์ ์์ต๋๋ค. ์ด๋ '๋์ ๋๋ฆฌ์ key๊ฐ ์๋ ๊ฒฝ์ฐ, x๋ฅผ ๋ฆฌํดํด์ค๋ผ' ๋ผ๋ ์ฉ๋์ ๋๋ค.
๋์ ๋๋ฆฌ๋ฅผ ์นด์ดํฐํ๋ (์ง๊ณ) ๊ฒฝ์ฐ์ getํจ์๊ฐ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋ฉ๋๋ค.
# [] ๊ธฐํธ ์ฌ์ฉํด ์์ ๊ฐ์ ธ์ค๊ธฐ
dict = {'ํ์ด': 300, 'ํฌ๋ก': 180, 3: 5}
dict['ํฌ๋ก'] # 180
# get ๋ฉ์๋๋ฅผ ์์ฉํด ์์ ๊ฐ์ ธ์ค๊ธฐ 1
# ๋์
๋๋ฆฌ์ ํด๋น key๊ฐ ์์๋ Key Error ๋ฅผ ๋ด๋ ๋์ , ํน์ ํ ๊ฐ์ ๊ฐ์ ธ์จ๋ค.
dict = {'ํ์ด': 300, 'ํฌ๋ก': 180}
dict.get('๋๋', 0) # 0
# get ๋ฉ์๋๋ฅผ ์์ฉํด ์์ ๊ฐ์ ธ์ค๊ธฐ 2
# ๋ฌผ๋ก , ๋์
๋๋ฆฌ์ ํด๋น key๊ฐ ์๋ ๊ฒฝ์ฐ ๋์ํ๋ value๋ฅผ ๊ฐ์ ธ์จ๋ค.
dict = {'ํ์ด': 300, 'ํฌ๋ก': 180}
dict.get('ํฌ๋ก', 0) # 180
๐ Set
๋์ ๋๋ฆฌ์ ๊ฐ์ ์ง์ด๋ฃ๊ฑฐ๋, ๊ฐ์ ์ ๋ฐ์ดํธ ํ ๋ [ ] ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
# ๊ฐ ์ง์ด๋ฃ๊ธฐ
dict = {'๊น์ฒ ์': 300, 'Anna': 180}
dict['ํ๊ธธ๋'] = 100
dict #{'Anna': 180, '๊น์ฒ ์': 300, 'ํ๊ธธ๋': 100}
# ๊ฐ ์์ ํ๊ธฐ1
dict = {'๊น์ฒ ์': 300, 'Anna': 180}
dict['๊น์ฒ ์'] = 500
dict # {'Anna': 180, '๊น์ฒ ์': 500}
# ๊ฐ ์์ ํ๊ธฐ2
dict = {'๊น์ฒ ์': 300, 'Anna': 180}
dict['๊น์ฒ ์'] += 500
dict # {'Anna': 180, '๊น์ฒ ์': 800}
๐ Delete
๋์ ๋๋ฆฌ์์ ํน์ key๊ฐ์ ์ง์ธ ๋์ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
1. del dict_obj[key]
del์ ํค์๋๋ก์จ, ๋ง์ฝ ๋์ ๋๋ฆฌ์ key๊ฐ ์๋ค๋ฉด keyError๊ฐ ๋ฐ์ํฉ๋๋ค.
2. pop(key[,default])
pop์ ๋ฉ์๋๋ก์จ, pop๋ฉ์๋๋ key ๊ฐ์ ํด๋นํ๋ value๋ฅผ ๋ฆฌํดํฉ๋๋ค. key๊ฐ ์๋ค๋ฉด ๋๋ฒ์งธ ํ๋ผ๋ฏธํฐ์ธ default๋ฅผ ๋ฆฌํดํฉ๋๋ค.
๋ง์ฝ default ์ค์ ํ์ง ์์์ ์์ keyError๊ฐ ๋ฐ์ํฉ๋๋ค.
# del ์ด์ฉํ๊ธฐ - ํค๊ฐ ์๋ ๊ฒฝ์ฐ
dict = {'๊น์ฒ ์': 300, 'Anna': 180}
del dict['๊น์ฒ ์']
dict #{'Anna': 180}
# del ์ด์ฉํ๊ธฐ - ํค๊ฐ ์๋ ๊ฒฝ์ฐ raise KeyError
my_dict = {'๊น์ฒ ์': 300, 'Anna': 180}
del my_dict['ํ๊ธธ๋']
'''
keyError ๋ฐ์!
'''
# pop ์ด์ฉํ๊ธฐ - ํค๊ฐ ์๋ ๊ฒฝ์ฐ ๋์ํ๋ value ๋ฆฌํด
my_dict = {'๊น์ฒ ์': 300, 'Anna': 180}
my_dict.pop('๊น์ฒ ์', 180) # 300
# pop ์ด์ฉํ๊ธฐ - ํค๊ฐ ์๋ ๊ฒฝ์ฐ ๋์ํ๋ default ๋ฆฌํด
my_dict = {'๊น์ฒ ์': 300, 'Anna': 180}
my_dict.pop('ํ๊ธธ๋', 180) # 180
๐ Iterate
๋์ ๋๋ฆฌ๋ฅผ for๋ฌธ์ ์ด์ฉํ์ฌ ์กฐํํ ๋ ๋๊ฐ์ง ๋ฐฉ๋ฒ์ด ์กด์ฌํฉ๋๋ค.
1. key๋ก๋ง ์ํํ๊ธฐ
2. key, value ๋์ ์ํํ๊ธฐ (items() ์ฌ์ฉ)
# key๋ก๋ง ์ํ
dict = {'๊น์ฒ ์': 300, 'Anna': 180}
for key in dict:
print(key)
# ์ด ๊ฒฝ์ฐ value๋ฅผ ์ฐพ๊ณ ์ถ์ผ๋ฉด dict[key] ์ ๊ฐ์ด ์ ๊ทผ์ ๋ฐ๋ก ํด์ฃผ์ด์ผ.
'''
๊น์ฒ ์
Anna
'''
# key-value ๋์ ์ํ
dict = {'๊น์ฒ ์': 300, 'Anna': 180}
for key, value in dict.items():
print(key, value)
'''
๊น์ฒ ์ 300
Anna 180
'''
๊ทธ ๋ฐ์ ๋์ ๋๋ฆฌ ์ ์ฉํ ํ
1. ํน์ key๊ฐ ๋์ ๋๋ฆฌ์ ์๋์ง ์๋์ง ์กฐํํ ๋ - in ์ฌ์ฉํ๊ธฐ
dict = {'๊น์ฒ ์': 300, 'Anna': 180}
print("๊น์ฒ ์" in dict) #True
print("๊น์ฒ ์" not in dict) # False
2. key ๋๋ value๋ง ๋ฝ์๋ด๋ ๋ฐฉ๋ฒ
1. key ๋ง : keys()
# key๋ฅผ extract - keys ์ฌ์ฉ
my_dict = {'๊น์ฒ ์': 300, 'Anna': 180}
my_dict.keys() # dict_keys(['๊น์ฒ ์', 'Anna'])
2. value๋ง : values()
# value๋ฅผ extract - values ์ฌ์ฉ
my_dict = {'๊น์ฒ ์': 300, 'Anna': 180}
my_dict.values() # dict_values([300, 180])
3. key - value ๋ชจ๋ : items()
# key, value ์์ extract - items ์ฌ์ฉ
my_dict = {'๊น์ฒ ์': 300, 'Anna': 180}
my_dict.items() # dict_items([('๊น์ฒ ์', 300), ('Anna', 180)])
์ค๋์ ํ์ด์ฌ์์ ํด์๋ฅผ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ ๋ฆฌํด๋ณด์์ต๋๋ค. ๋์ ๋๋ฆฌ ๊ด๋ จ ๋ด์ฉ์ด ๋ ๊ถ๊ธํ์๋ค๋ฉด?! ์๋ ํฌ์คํ ์ ์ฝ์ด์ฃผ์ธ์ : )
์ฐธ๊ณ
'๐ Algorithm > ๐ Python ๋ฌธ๋ฒ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] Set(์ ) (0) | 2021.01.16 |
---|---|
[Python ์๋ฃ๊ตฌ์กฐ] Heap (ํ) (0) | 2021.01.09 |
[Python ์๋ฃ๊ตฌ์กฐ] Queue (ํ) ๊ตฌํํ๊ธฐ (0) | 2021.01.06 |