29. Jewels and Stones
🎯 leetcode - 771. Jewels and Stones
🤔 私の答え
📌 質問する
- 파이썬 알고리즘 인터뷰 29번 문제
📌 名前の日付
2020.02.01
📌 試行回数
1 try
💡 Code
class Solution:
def numJewelsInStones(self, jewels: str, stones: str) -> int:
stone_dict = defaultdict(int)
count = 0
for stone in stones:
stone_dict[stone] += 1
for jewel in jewels:
count += stone_dict[jewel]
return count
💡 トラブルシューティング方法
- defaultdict를 사용해 stones의 종류와 개수를 담았다.
- jewels가 stone_dict에 존재하면 해당 개수(value)를 count에 더했다.
- 최종적으로 count를 리턴!
💡 新知
-
答えを間違える理由
-
😉 別の解釈
📌 一つ。カウンタで計算を省略
class Solution:
def numJewelsInStones(self, jewels: str, stones: str) -> int:
freqs = Counter(stones)
count = 0
print(freqs) # 디버깅용
for j in jewels:
count += freqs[j]
return count
➡ INPUT EXAMPLE
jewels = "abcd"
stones = "AAbbCCdd"
➡ OUTPUT EXAMPLE
Counter({'A': 2, 'b': 2, 'C': 2, 'd': 2})
count = 4
💡 新知
- Counter의 경우 존재하지 않는 키를 부르면 KeyError을 발생시키지 않고 0을 반환한다.
- 따라서 이에 대한 예외 처리가 필요하지 않아 간편하다.
🌵 collections.Counter()
➡ INPUT
c = Counter() # a new, empty counter
c = Counter("gallahad") # a new counter from an iterable
c = Counter({"a": 4, "b": 2}) # a new counter from a mapping
c = Counter(i=4, j=2)
➡ OUTPUT
Counter()
Counter({'a': 3, 'l': 2, 'g': 1, 'h': 1, 'd': 1})
Counter({'a': 4, 'b': 2})
Counter({'i': 4, 'j': 2})
📌 二。リスト計算の使用
class Solution:
def numJewelsInStones(self, jewels: str, stones: str) -> int:
return sum(item in jewels for item in stones)
💡 新知
✔ 리스트 컴프리헨션
- 예를 들어 jewels = "abcd", stones = "AAbbCCdd"라고 하자.
>> [item for item in stones]
['A', 'A', 'b', 'b', 'C', 'C', 'd', 'd']
>> [item in jewels for item in stones]
[False, False, True, True, False, False, True, True]
---------------------------------------------------------
✔ 파이썬 True, False와 sum 함수
- True는 정수 값으로 1, False는 0이다.
>> int(True)
1
>> int(False)
0
>> sum([True, True, False])
2
Reference
この問題について(29. Jewels and Stones), 我々は、より多くの情報をここで見つけました https://velog.io/@eunseokim/29.-Jewels-and-Stonesテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol