리트코드 알고리즘/리트코드 easy

(간단한 코드)리트코드 771. Jewels and Stones

문학적 딥러닝 2024. 12. 12. 16:34

 

이 문제는 jewels는 문자열 형태로 한가지 문자들만 담고 있고, stones 안에는 다양한 문자열들이 있다.

그리고 여기서 문자를 "돌"이라고 칭하고, 

stones는 내가 가지고 있는 돌 중에, jewels에 해당하는 돌이 몇개 있는지 알아보는 것이다. 

 

class Solution:
    def numJewelsInStones(self, jewels: str, stones: str) -> int:
        
        cnt = 0
        for s in stones:
            if s in jewels:
                cnt += 1
        return cnt

 

그냥 내가 가지고 있는 돌들 중에, jewels안에 몇개 있는지 확인하는 것이 가장 간단한 방법이다.

cnt는 count의 약자로 자주 쓰인다.

 

여기서 문제는 "문자열 안에 문자가 있는지 확인"하는 행위는 "문자열을 처음부터 끝까지 스캔"하는 행위를 의미한다.

-> 물론 이렇게 풀어도 잘 해결이 된다

따라서 이 문제는 문자열이 아닌 set()을 활용하는 것을 의도하고 있다. 

 

set()은 영어로 "집합"이라는 뜻이고, "집합"의 특징은 "같은 원소를 가지고 있지 않다"와

 

set()과 dict()은 "확인할 때, 모든 원소를 확인하지 않는다"라는 특징이 있다. 

 

이를 통틀어서 hash map 이라고 한다 (set과 dictionary는 같은 type이 아니다)

 

따라서 다음과 문자을 하나더 추가하는 경우가 더 빠른 코드를 완성하게 되는 것이다.

class Solution:
    def numJewelsInStones(self, jewels: str, stones: str) -> int:
        jewels = set(jewels) 
        cnt = 0
        for s in stones:
            if s in jewels:
                cnt += 1
        return cnt