✔ 풀이
class ListNode:
def __init__(self, key = None, value = None):
self.key = key
self.value = value
self.next = None
from collections import defaultdict
class MyHashMap:
def __init__(self):
self.size = 1000
self.table = defaultdict(ListNode)
def put(self, key: int, value: int) -> None:
idx = key % self.size
if self.table[idx].value is None:
self.table[idx] = ListNode(key, value)
return
p = self.table[idx]
while p:
if p.key == key:
p.value = value
return
if p.next is None:
break
p = p.next
p.next = ListNode(key, value)
def get(self, key: int) -> int:
idx = key % self.size
if self.table[idx].value is None:
return -1
p = self.table[idx]
while p:
if p.key == key:
return p.value
p = p.next
return -1
def remove(self, key: int) -> None:
idx = key % self.size
if self.table[idx].value is None:
return
p = self.table[idx]
if p.key == key:
self.table[idx] = ListNode() if p.next == None else p.next
return
prev = p
while p:
if p.key == key:
prev.next = p.next
return
prev, p = p, p.next
✔ 풀이 (해시 테이블을 이용한 풀이)
class Solution:
def numJewelsInStones(self, jewels: str, stones: str) -> int:
stone_dic = {}
for char in stones:
if char not in stone_dic:
stone_dic[char] = 1
else:
stone_dic[char] += 1
cnt = 0
for char in jewels:
if char in stone_dic:
cnt += stone_dic[char]
return cnt
✔ 풀이 (defaultdict을 이용한 비교 생략)
from collections import defaultdict
class Solution:
def numJewelsInStones(self, jewels: str, stones: str) -> int:
stone_dic = defaultdict(int)
for char in stones:
stone_dic[char] += 1
cnt = 0
for char in jewels:
cnt += stone_dic[char]
return cnt
✔ 풀이 (Counter로 계산 생략)
from collections import Counter
class Solution:
def numJewelsInStones(self, jewels: str, stones: str) -> int:
stone_dic = Counter(stones)
cnt = 0
for char in jewels:
cnt += stone_dic[char]
return cnt
✔ 풀이 (Pythonic Way)
from collections import Counter
class Solution:
def numJewelsInStones(self, jewels: str, stones: str) -> int:
return sum([s in jewels for s in stones])
✔ 풀이 (리스트)
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
answer, prev = 0, []
for char in s:
if char in prev:
answer = max(answer, len(prev))
prev = prev[prev.index(char) + 1: ] + [char]
else:
prev.append(char)
return max(answer, len(prev))
✔ 풀이 (슬라이딩 윈도우 & 투 포인터)
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
used = {}
start = max_len = 0
for i, char in enumerate(s):
if char in used and start <= used[char]:
start = used[char] + 1
else:
max_len = max(max_len, i - start + 1)
used[char] = i
return max_len
✔ 풀이 (Counter & heapq)
from collections import Counter
import heapq
class Solution:
def topKFrequent(self, nums: List[int], k: int) -> List[int]:
num_dic = Counter(nums)
freqs_heap = []
for key in num_dic:
heapq.heappush(freqs_heap, (-num_dic[key], key))
topk = []
for _ in range(k):
topk.append(heapq.heappop(freqs_heap)[1])
return topk
✔ 풀이 (Pythonic Way - Counter, most_common메서드)
from collections import Counter
class Solution:
def topKFrequent(self, nums: List[int], k: int) -> List[int]:
return [ key for key, val in Counter(nums).most_common(k)]