Programming/leetcode
771. Jewels and Stones
홍열
2021. 2. 22. 10:31
728x90
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])