2024. 2. 2. 08:43ㆍ코딩 테스트/파이썬 알고리즘 인터뷰
leetcode 771 Jewels and Stones - https://leetcode.com/problems/jewels-and-stones/description/
J는 보석이며, S는 갖고 있는 돌이다. S에는 보석이 몇개나 있을까? 대소문자는 구분한다.
예제
입력
J = "aA", S = "aAAbbbb"
출력
3
풀이
파이썬의 Counter 딕셔너리를 사용하면 S 문자열이 문자별 개수를 구할 수 있다. J의 각 문자를 순회하면서 해당 문자를 key 값으로 Counter에 value, 즉 개수를 더해나가면 간단히 보석의 개수를 구할 수 있다. 코드는 다음과 같다.
def numJewelsInStones(jewels: str, stones: str):
counter = collections.Counter(stones)
count = 0
for jewel in jewels:
count = count + counter[jewel]
return count
Python의 리스트 컴프리헨션을 사용하면 좀더 Pythonic 하게 코드를 작성할 수 있다.
def numJewelsInStones(self, jewels, stones):
return sum(stone in jewels for stone in stones)
코드를 풀어서 정리해보도록 한다.
먼저 [stone for stone in stones]의 출력은 다음과 같다.
>>> [stone for stone in stones]
['a', 'A', 'A', 'b', 'b', 'b', 'b']
위의 stones의 문자열을 문자 리스트로 생성해준다. 여기서 [stone in jewels for stone in stones]을 추가해주면 각 stone 문자에 대해서 jewels에 포함되는지 Boolean형태(True/False)로 반환해준다. 출력은 다음과 같다.
>>> [stone in jewels for stone in stones]
[True, True, True, False, False, False, False]
sum함수에서는 리스트 컴프리핸션을 의미하는 []를 제거할 수 있으며, sum(stone in jewels for stone in stones)으로 호출할 수 있다.
sum 함수는 리스트에서 True를 1로, False를 0으로 취급하여 덧셈을 진행한다. 따라서 결과는 3이 된다.
'코딩 테스트 > 파이썬 알고리즘 인터뷰' 카테고리의 다른 글
Python 알고리즘 인터뷰 - 문제 31. 상위 K 빈도 요소 (0) | 2024.02.02 |
---|---|
Python 알고리즘 인터뷰 - 문제 30. 중복 문자 없는 가장 긴 부분 문자열 (0) | 2024.02.02 |
Python 알고리즘 인터뷰 - 문제 28. 해시맵 디자인 (0) | 2024.01.28 |
Python 알고리즘 인터뷰 - 문제 26. 원형 데크 디자인 (1) | 2024.01.28 |
Python 알고리즘 인터뷰 - 문제27. k개 정렬 리스트 병합 (0) | 2024.01.26 |