-
771. Jewels and StonesProgramming/leetcode 2021. 2. 22. 10:31728x90
jewel이 stone에 몇개 들어있는지 세어보는 문제
1) 이중 for문
int numJewelsInStones(string J, string S) { int cnt = 0; for (int i = 0; i<J.size(); i++) { for (int j = 0; j < S.size(); j++) { if (J[i] == S[j]) cnt++; } } return cnt; }
2) in을 이용
def numJewelsInStones(self, jewels: str, stones: str) -> int: cnt = 0 for s1 in stones: if s1 in jewels: cnt += 1 return cnt
3) dict 이용
def numJewelsInStones(self, jewels:str, stones:str)->int: # J의 각 문자가 S에 몇개 들어있는지 파악하면 되는 문제 freq = {} count = 0 for ss in stones: if ss in freq: freq[ss] = 1 else: freq[ss] += 1 for char in jewels: if char in freq: count += freq[char] return count
4) dict 이용 (default dict 이용)
def numJewelsInStones(self, jewels:str, stones:str)->int: # J의 각 문자가 S에 몇개 들어있는지 파악하면 되는 문제 freq = collections.defaultdict(int) count = 0 for ss in stones: freq[ss] += 1 for char in jewels: if char in freq: count += freq[char] return count
5) Counter로 계산하자
def numJewelsInStones(self, jewels:str, stones:str)->int: # J의 각 문자가 S에 몇개 들어있는지 파악하면 되는 문제 freq = collections.Counter(stones) count = 0 for char in jewels: if char in freq: count += freq[char] return counter
6) 근데 위 방법들보다 깔끔하고, 더 빠른 방법이 있다.
-> 리스트 컴프레션 이용
#stones를 하나씩 가져와서 s에 넣어주고, s가 jewels에 있는지 확인하자 #sum을 해보면, true일때만 count 증가 return sum([s in jewels for s in stones])
'Programming > leetcode' 카테고리의 다른 글
347. Top K Frequent Elements (0) 2021.02.22 3. Longest Substring Without Repeating Characters (0) 2021.02.22 706. Design HashMap (0) 2021.02.22 23. Merge k Sorted Lists (0) 2021.02.19 641. Design Circular Deque (0) 2021.02.19