목차
반응형
문제
https://leetcode.com/problems/jewels-and-stones/
jewels에는 돌 중에 보석으로 분류되는 문자들이 있고 stones에는 돌을 나타내는 문자들이 있다. 돌 중에 보석인 것들의 개수를 반환하면 된다. 소문자와 대문자는 구분한다.
예시 입출력
Input:
jewels = "aA", stones = "aAAbbbb"
Output:
3
풀이
내 풀이
class Solution:
def numJewelsInStones(self, jewels: str, stones: str) -> int:
check=list(jewels)
count=0
for s in stones:
if s in check:
count+=1
return count
확인해야 하는 jewels를 리스트로 만들어서 문자별로 구분하고 stones의 문자들과 하나씩 비교했다.
책 풀이
1. Counter 사용
import collections
class Solution:
def numJewelsInStones(self, J: str, S: str) -> int:
freqs = collections.Counter(S) # 돌(S) 빈도 수 계산
count = 0
# 비교 없이 보석(J) 빈도 수 합산
for char in J:
count += freqs[char]
return count
Counter 객체로 빈도수를 계산한다. Counter에서는 존재하지 않는 키를 조회해도 0을 출력하기 때문에 따로 에러처리를 할 필요가 없다.
2. 리스트 컴프리헨션
class Solution:
def numJewelsInStones(self, J: str, S: str) -> int:
return sum(s in J for s in S)
S의 문자 s가 J에 포함되는지 확인한다. 그러면 결과에 따라 True, False가 반환되는데 해당 값을 sum()으로 합산하는 것이다.
참고한 책 : 파이썬 알고리즘 인터뷰
반응형
'Study > Algorithm' 카테고리의 다른 글
[LeetCode] #200. Number of Islands (python) (0) | 2022.03.17 |
---|---|
[LeetCode] #3. Longest Substring Without Repeating Characters (python) (0) | 2022.03.09 |
[LeetCode] #706. Design HashMap (python) (0) | 2022.03.09 |
[LeetCode] #23. Merge k Sorted Lists (python) (0) | 2022.03.09 |
[LeetCode] #641. Design Circular Deque (python) (0) | 2022.03.09 |