<--- 리트코드 771. Jewels and Stones --->
# 문제: J는 보석이며, S는 갖고 있는 돌이다. S에는 보석이 몇 개나 있을까? 대소문자는 구분한다.
입력
J = "aA", S = "aAAbbbb" |
출력
3 |
# 풀이
1. 해시 테이블을 이용한 풀이
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
def num_jewels_in_stones(J, S):
freqs = {}
count = 0
for char in S:
if char not in freqs:
freqs[char] = 1
else:
freqs[char] += 1
for char in J:
if char in freqs:
count += freqs[char]
return count
J = "aA"
S = "aAAbbbb"
print(num_jewels_in_stones(J, S))
|
cs |
2. defaultdict를 이용한 비교 생략 (존재하지 않는 키에 대해 디폴트를 Return)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
import collections
def num_jewels_in_stones(J, S):
freqs = collections.defaultdict(int)
count = 0
for char in S:
freqs[char] += 1
for char in J:
count += freqs[char]
return count
J = "aA"
S = "aAAbbbb"
print(num_jewels_in_stones(J, S))
|
cs |
3. Counter로 계산 생략
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
import collections
def num_jewels_in_stones(J, S):
freqs = collections.Counter(S)
count = 0
for char in J:
count += freqs[char]
return count
J = "aA"
S = "aAAbbbb"
print(num_jewels_in_stones(J, S))
|
cs |
4. 파이썬 다운 방식
1
2
3
4
5
6
|
def num_jewels_in_stones(J, S):
return sum(s in J for s in S)
J = "aA"
S = "aAAbbbb"
print(num_jewels_in_stones(J, S))
|
cs |
'Python' 카테고리의 다른 글
파이썬 알고리즘 인터뷰 - 31. 상위 K 빈도 요소 (0) | 2022.01.27 |
---|---|
파이썬 알고리즘 인터뷰 - 30. 중복 문자 없는 가장 긴 부분 문자열 (0) | 2022.01.27 |
파이썬 알고리즘 인터뷰 - 27. k개 정렬 리스트 병합 (0) | 2022.01.25 |
파이썬 알고리즘 인터뷰 - 26. 원형 데크 디자인 (0) | 2022.01.24 |
파이썬 알고리즘 인터뷰 - 25. 원형 큐 디자인 (0) | 2022.01.24 |