ν΄μλ?
- κ°λ : ν΄μ ν¨μλ₯Ό μ¬μ©νμ¬ ν€λ₯Ό κ°μ 맀ννλ λ°μ΄ν° ꡬ쑰
- ν΄μ ν¨μλ λΉ λ₯Έ μ‘°νλ₯Ό μν΄ ν€λ₯Ό λ³νλ κ°(μ£Όλ‘ μΈλ±μ€)μΌλ‘ λ³ννμ¬ λ°μ΄ν°λ₯Ό ν¨μ¬ λΉ λ₯΄κ² κ²μν μ μκ² ν΄μ€λ€.
- μ°μ μΈλ±μ€λ₯Ό μ¬μ©νλ κΈ°μ‘΄ λ°°μ΄κ³Ό λ¬λ¦¬ ν΄μλ ν€λ₯Ό μ¬μ©νμ¬ λ°μ΄ν°λ₯Ό νμ
νΉμ§
- λ¨λ°©ν₯ μ‘μΈμ€: ν€λ₯Ό μ¬μ©νμ¬ κ°μ μ°Ύμ μλ μμ§λ§ κ°μμ ν€λ₯Ό μ°Ύμ μλ μλ€.
- μμ μκ° μ‘°ν(O(1)): ν΄μ ν¨μλ ν€μμ μ§μ μΈλ±μ€λ₯Ό κ³μ°νλ―λ‘ μ 체 λ°μ΄ν° μ§ν©μ κ²μν νμ μμ΄ λΉ λ₯΄κ² κ²μ κ°λ₯
- λ³ν νμ: ν΄μν¨μλ₯Ό ν΅ν΄ ν€λ₯Ό μΈλ±μ€λ‘ λ³νν΄μΌ κ°μ ν¨μ¨μ μΌλ‘ μ‘μΈμ€ν μ μλ€.
- ν΄μλ₯Ό μ¬μ©νμ§ μμΌλ©΄ νλͺ©μ μ°ΎκΈ° μν΄ λ°μ΄ν° μ 체 κ²μμ μνν΄μΌ νλ―λ‘ ν¨μ¨μ±μ΄ ν¨μ¬ λ¨μ΄μ§λ€.
ν΄μ ν μ΄λΈ λλ λ²ν·
- ν΄μ±μμ 'ν΄μ ν μ΄λΈ' λλ 'ν΄μ 맡'μ ν€-κ° μμ μ μ₯νλ λ°μ΄ν° ꡬ쑰μ΄λ©°, 'λ²ν·'μ μ΄λ¬ν μμ μ μ₯νλ ν΄μ ν μ΄λΈ λ΄μ κ°λ³ μ¬λ‘―
ν΄μ±μ νμ© λΆμΌ
- λΉλ°λ²νΈ κ΄λ¦¬: ν΄μ±μ λΉλ°λ²νΈλ₯Ό μ½κ² λλ릴 μ μλ ν΄μ κ°μΌλ‘ λ³ννμ¬ λΉλ°λ²νΈλ₯Ό μμ νκ² μ μ₯νλ λ° μ¬μ©
- λ°μ΄ν°λ² μ΄μ€ μΈλ±μ±: ν΄μ ν¨μλ λκ·λͺ¨ λ°μ΄ν°λ² μ΄μ€μμ λ°μ΄ν° κ²μ μλ μ¦κ°
- λΈλ‘체μΈ: ν΄μ ν¨μλ λΈλ‘μ²΄μΈ κΈ°μ μμ νΈλμμ μ 무결μ±κ³Ό 보μμ 보μ₯νλ λ° μ¬μ©
ν΄μ ν¨μ
- νμ΄μ¬μμ λμ λ리λ λ΄λΆμ μΌλ‘ ν΄μ±μ μ¬μ©νμ¬ O(1) μ‘°νλ₯Ό νμ©
ν΄μ ν¨μλ₯Ό μ€κ³ν λ κ³ λ €ν΄μΌ ν μμ
- ν΄μ ν μ΄λΈ ν¬κΈ°: ν΄μ ν¨μκ° λ°ννλ κ°μ ν΄μ ν μ΄λΈμ ν¬κΈ°μ λ§μμΌ νλ€.
- μΆ©λ μ΅μν: μ’μ ν΄μ ν¨μλ μλ‘ λ€λ₯Έ λ κ°μ ν€κ° λμΌν μΈλ±μ€μ ν΄μνλ κ²½μ°(μΆ©λ)λ₯Ό μ΅μννλ€. μΆ©λμ΄ λ°μνλ©΄ λ°λμ μ²λ¦¬ν΄μΌ νλ€.(ex) μ²΄μΈ λλ μ€ν μ£Όμ μ§μ )
μΌλ°μ μΈ ν΄μ ν¨μ
1. λΆν λ°©λ²(λͺ¨λλ¬μ€)
- λͺ¨λλ‘ μ°μ°μ μ¬μ©νμ¬ ν΄μλ₯Ό κ³μ°. ( h(x) = x \ mod m )
- mμ λ³΄ν΅ μμλ‘, μΆ©λμ μ€μ΄λ λ° λμμ΄ λλλ°, μμλ 1κ³Ό κ·Έ μ체 μΈμλ λλμ μ΄ μκΈ° λλ¬Έμ λ κ°μ λ€λ₯Έ μ«μκ° λμΌν ν΄μλ₯Ό μμ±ν νλ₯ μ μ΅μννμ¬ mμ΄ μμμΈ κ²½μ°, ν΄μ ν μ΄λΈμ ν€ λΆν¬κ° λ κ· μΌν΄μ§λ€.
2. κ³±μ λ°©λ²
- μ΄ λ°©λ²μ ν€μ μμ(ex) ν©κΈ λΉμ¨)λ₯Ό κ³±νμ¬ ν μ΄λΈ μ 체μ κ°μ λΆμ°μν¨λ€.
- ( h(x) = \lfloor ((x \cdot A) \mod 1) \cdot m \rfloor \)
- Aλ μμ(ex) ν©κΈ λΉμ¨)
- mμ λ²ν·μ μ
μ΄ λ°©λ²μ μμλ₯Ό μ¬μ©ν μ§μ μ μΈ λͺ¨λμ μ°μ°μ νΌνκ³ , λμ ν€μ ν©κΈλΉμ κ°μ μμλ₯Ό κ³±νμ¬ κ· μΌν λΆν¬
3. λ¬Έμμ΄ ν΄μ±
- λ¬Έμμ΄ ν€λ ν΄μ ν μ΄λΈμμλ νν λ³Ό μ μμΌλ©° ν΄μ ν¨μλ λ¬Έμμ΄μ μΈλ±μ€λ‘ λ³νν΄μΌ νλ€.
- λ¬Έμμ΄ ν΄μ±μ μΌλ°μ μΈ λ°©λ²: λ¬Έμμ΄μ λ¬Έμ μνμ€λ‘ μ·¨κΈνκ³ λ¬Έμ κ°μ κ°μ€μΉ ν©κ³λ₯Ό κ³μ°
ν΄μ ν μ΄λΈ μΆ©λ μ²λ¦¬νκΈ°
- ν΄μ ν μ΄λΈμ λ°μ΄ν°λ₯Ό μ½μ ν λ λ κ°μ ν€κ° λμΌν μΈλ±μ€(λ²ν·)μ 맀νλμ΄ μΆ©λ λ°μ κ°λ₯
1. μ²΄μΈ μ°κ²°(λΆλ¦¬ μ°κ²°)
- μλ λ°©μ
- μΆ©λμ΄ λ°μνλ©΄(λ κ°μ ν€κ° λμΌν λ²ν·μ 맀νλλ κ²½μ°) ν΄λΉ λ²ν·μ μ°κ²°λ λͺ©λ‘ μμ±
- μΆ©λνλ μ κ°μ κ°μ λ²ν·μ μ°κ²°λ λͺ©λ‘μ μΆκ°λλ€.
- μ₯μ
- ꡬνμ΄ κ°λ¨
- ν΄μ ν μ΄λΈμ ν€μ κ°μμ μ ν μμ΄ μ μ₯ κ°λ₯
- λ¨μ
- μΆ©λμ΄ λΉλ²ν κ²½μ° λ§ν¬λ λͺ©λ‘μ μννλ©΄ μκ° λ³΅μ‘μ±μ΄ μ¦κ°νλ―λ‘ κ²μ λ° μ½μ μ ν¨μ¨μ±μ΄ λ¨μ΄μ§λ€.
- μ°κ²°λ λͺ©λ‘μμ μΆκ° ν¬μΈν°λ₯Ό μ μ§ν΄μΌ νλ μ€λ²ν€λλ‘ μΈν΄ κ³΅κ° νμ©λκ° λ¨μ΄μ§λ€.
2. μ€ν μ΄λλ μ±
- μ€ν μ΄λλ μ±μ ν μ΄λΈμμ μ κ°μ λν λ€λ₯Έ λΉ λ²ν·μ μ°Ύμ μΆ©λμ ν΄κ²°
- μ€ν μ΄λλ μ±μ λ©μλ
- a. μ ν νλ‘λΉ
- μλ λ°©μ: μΆ©λμ΄ λ°μνλ©΄ μκ³ λ¦¬μ¦μ λΉ λ²ν·μ΄ λ°κ²¬λ λκΉμ§ ν μ΄λΈμ λ€μ λ²ν·μ νμΈ
- μ₯μ
- ꡬνμ΄ κ°λ¨
- μ 체 ν΄μ ν μ΄λΈμ μ¬μ©νλ―λ‘ κ³΅κ°μ ν¨μ¨μ μΌλ‘ μ¬μ©κ°λ₯
- λ¨μ
- κΈ°λ³Έ ν΄λ¬μ€ν°λ§: ν΄μ μΈλ±μ€κ° κ°κΉμ΄ κ°μ ν΄λ¬μ€ν°λ₯Ό νμ±νλ κ²½ν₯μ΄ μμ΄ ν₯ν λ λ§μ μΆ©λλ°μ κ°λ₯νμ¬ μ±λ₯μ΄ μ νλ μ μλ€.
- ν μ΄λΈμ΄ κ°λ μ°¨λ©΄ λΉ λ²ν·μ κ²μνλ μλ κ°μ
- b. μ΄μ°¨ νλ‘λΉ
- μλ λ°©μ: μ ν νλ‘λΉμμμ²λΌ λ°λ‘ λ€μ λ²ν·μΌλ‘ μ΄λνλ λμ μΆ©λ μ§μ μμ λΉ λ²ν·μ΄ λ°κ²¬λ λκΉμ§ μ΄μ°¨ λ¨κ³λ‘ μ΄λ
- μ₯μ :
- μ ν νλ‘λΉμ λΉν΄ ν΄λ¬μ€ν°λ§μ΄ μ€μ΄λ λ€
- ν μ΄λΈ μ 체μ κ°μ λ μ λΆμ°μν¨λ€
- λ¨μ
- 2μ°¨ ν΄λ¬μ€ν°λ§: 1μ°¨ ν΄λ¬μ€ν°λ§μ μ€μ΄μ§λ§, λμΌν μΈλ±μ€μ ν΄μνλ ν€λ λμΌν μ΄μ°¨ νλ‘λΉ ν¨ν΄μ λ°λ₯΄κΈ° λλ¬Έμ ν€ κ°μ μΆ©λμ΄ λ°μ κ°λ₯
- c. μ΄μ€ ν΄μ±
- μλ μ리: λ κ°μ ν΄μ ν¨μλ₯Ό μ¬μ©νμ¬ νλ‘λΈ μνμ€λ₯Ό κ²°μ -> μΆ©λμ΄ λ°μνλ©΄ λ λ²μ§Έ ν΄μ ν¨μκ° λΉ λ²ν·μ μ°ΎκΈ° μν΄ μΌλ§λ λ©λ¦¬ μ΄λν μ§ κ²°μ
- μ₯μ
- κΈ°λ³Έ λ° λ³΄μ‘° ν΄λ¬μ€ν°λ§μ λͺ¨λ μ΅μν
- μ ν λλ μ΄μ°¨ νλ‘λΈλ³΄λ€ ν΄μ ν μ΄λΈ μ 체μ λ λμ λΆν¬λ₯Ό μ 곡
- λ¨μ
- ꡬννκΈ°κ° λ 볡μ‘
μΆκ°
set
- ν΄μ ν μ΄λΈλ‘ ꡬνλμ΄ μλ€.
- κ·Έλμ setμμ in μ°μ°μ ν λλ ν΄λΉ κ°μ΄ μ μ₯λ μμΉλ₯Ό λ°λ‘ μ°Ύμκ°μ κ²μνλλ°, μ΄ κ³Όμ μ΄ O(1)μ μκ° λ³΅μ‘λλ₯Ό κ°μ§λ€.
- μ¦, setμ λ΄λΆμ μΌλ‘ ν΄μ ν μ΄λΈμ μ΄μ©ν΄ κ°μ μ μ₯νκ³ νμνκΈ° λλ¬Έμ, κ°μ΄ μ΄λ μμΉμ μλμ§λ₯Ό μ¦μ μ μ μκΈ°μ κ²μμκ°μ΄ O(1)μ΄λ€.
λ¬Έμ
'''
arr = [1,2,3,4,8] target=6 return=True
arr = [2,3,4,9] target=10 return=False
'''
def solution(arr, target):
# μ€λ³΅ μμ΄ μ«μ μμ μ°ΎμμΌ νλ―λ‘, arrλ₯Ό μ§ν©μΌλ‘
seen = set()
for num in arr:
# νμ¬ μ«μλ‘λΆν° νμν λ€λ₯Έ μ«μλ₯Ό κ³μ°
complement = target - num
# complementκ° seenμ μκ³ , numμ΄ complementμ λ€λ₯Ό λλ§ Trueλ₯Ό λ°ν
if complement in seen:
return True
seen.add(num)
return False
print(solution([1,2,3,4,8],6))
print(solution([2,3,4,9],10))
print(solution([1,5,2,4],2))
def solution(string_list, query_list):
string_set = set(string_list) # string_listλ₯Ό setμΌλ‘ λ³ν, O(n)
result = []
for query in query_list: # query_listμ λν΄ μμ°¨μ μΌλ‘ νμΈ, O(m)
if query in string_set: # O(1) (ν΄μ ν
μ΄λΈμ μ΄μ©ν νμ)
result.append(True)
else:
result.append(False)
return result
μμ£Όνμ§ λͺ»ν μ μ
https://school.programmers.co.kr/learn/courses/30/lessons/42576
def solution(participant, completion):
hashtable= {}
for i in participant:
if i not in hashtable:
hashtable[i]=1
else:
hashtable[i]+=1
for i in completion:
if i in hashtable:
hashtable[i]-=1
for k,v in hashtable.items():
if v == 1:
return k
print(solution(["leo", "kiki", "eden"],["eden", "kiki"] ))
ν μΈ νμ¬
https://school.programmers.co.kr/learn/courses/30/lessons/131127
def solution(want, number, discount):
hashtable = {}
for i in range(len(want)):
hashtable[want[i]] = number[i]
cnt=0
for i in range(len(discount)-9):
hashtable2 = {}
for j in range(i,i+10):
if discount[j] not in hashtable2:
hashtable2[discount[j]] = 1
else:
hashtable2[discount[j]] += 1
if hashtable == hashtable2:
cnt+=1
return cnt
print(solution(["banana", "apple", "rice", "pork", "pot"],[3, 2, 2, 2, 1], ["chicken", "apple", "apple", "banana", "rice", "apple", "pork", "banana", "pork", "rice", "pot", "banana", "apple", "banana"] ))
print(solution(["a", "b"], [1, 9], ["b", "b", "b", "b", "b", "b", "b", "b", "b", "b", "a"]))
print(solution(["banana", "apple", "rice", "pork", "pot"],[3, 2, 2, 2, 1], ["apple", "banana", "rice", "apple", "pork", "banana", "pork", "rice", "pot", "banana", "apple", "banana", "chicken", "apple"]))
μ€νμ±ν λ°©
https://school.programmers.co.kr/learn/courses/30/lessons/42888
μ΄λ° μλμ½λ
def solution(record):
answer = []
dict = {}
for i in record:
if iμ 첫 λ¨μ΄κ° 'Enter':
dict[iμ λλ²μ§Έ λ¨μ΄] = iμ μΈλ²μ§Έ λ¨μ΄
print(iμ μΈλ²μ§Έ λ¨μ΄λμ΄ λ€μ΄μμ΅λλ€)
elif iμ 첫 λ¨μ΄κ° 'Leave':
print(iμ dict[iμ λλ²μ§Έ λ¨μ΄]μ value μ΄ λκ°μ΅λλ€)
elif iμ 첫 λ¨μ΄κ° 'Change':
dict[iμ λλ²μ§Έ λ¨μ΄] = iμ μΈλ²μ§Έ λ¨μ΄λ‘ λ³κ²½
return answer
print(solution(["Enter uid1234 Muzi", "Enter uid4567 Prodo","Leave uid1234","Enter uid1234 Prodo","Change uid4567 Ryan"]))
#κ²°κ³Ό: ["Prodoλμ΄ λ€μ΄μμ΅λλ€.", "Ryanλμ΄ λ€μ΄μμ΅λλ€.", "Prodoλμ΄ λκ°μ΅λλ€.", "Prodoλμ΄ λ€μ΄μμ΅λλ€."]
λ³κ²½ λ΅
def solution(record):
answer = []
dict = {}
for i in record:
parts = i.split()
action = parts[0]
uid = parts[1]
if action == "Enter" or action == "Change":
nickname = parts[2]
dict[uid] = nickname
for i in record:
parts = i.split()
action = parts[0]
uid = parts[1]
if action == "Enter":
answer.append(f"{dict[uid]}λμ΄ λ€μ΄μμ΅λλ€.")
elif action == "Leave":
answer.append(f"{dict[uid]}λμ΄ λκ°μ΅λλ€.")
return answer
λ² μ€νΈμ¨λ²
https://school.programmers.co.kr/learn/courses/30/lessons/42579
from pydoc import plain
def solution(genres, plays):
answer = []
dict = {}
for i in range(len(genres)):
if genres[i] not in dict:
dict[genres[i]] = plays[i]
else:
dict[genres[i]] += plays[i]
dict2 = {}
for i in range(len(genres)):
if genres[i] not in dict2:
dict2[genres[i]] = [(i, plays[i])]
else:
dict2[genres[i]].append((i, plays[i]))
sorted_genres = sorted(dict.items(), key=lambda x: x[1], reverse=True)
for genres,k in sorted_genres:
sorted_songs = sorted(dict2[genres], key = lambda x: (-x[1], x[0]))
answer.extend([song[0] for song in sorted_songs[:2]])
return answer
μ κ³ κ²°κ³Ό λ°κΈ°
https://school.programmers.co.kr/learn/courses/30/lessons/92334
def solution(id_list, report, k):
answer = []
reporter_dict = {user: set() for user in id_list}
reported_dict = {user: 0 for user in id_list}
for i in report:
parts = i.split()
reporter = parts[0]
reported = parts[1]
if reported not in reporter_dict[reporter]:
reporter_dict[reporter].add(reported)
reported_dict[reported] += 1
blocked_users = {user for user, count in reported_dict.items() if count >= k}
for reporter in id_list:
count = sum(1 for user in reporter_dict[reporter] if user in blocked_users)
answer.append(count)
return answer
'π―μκ³ λ¦¬μ¦ > μκ³ λ¦¬μ¦ μ 리' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
μ§ν© (1) | 2024.10.04 |
---|---|
νΈλ¦¬ (0) | 2024.10.04 |
ν (1) | 2024.10.03 |
μ€ν (0) | 2024.09.10 |
λ°°μ΄ (1) | 2024.09.09 |