본문 바로가기
LeetCode

771. Jewels and Stones

by 싼쵸 2022. 5. 30.
반응형

문제

문제 설명

jewls가 char가 stones에 몇 개가 있는지 구하는 문제다.

내 현재 풀이

/**
 * @param {string} jewels
 * @param {string} stones
 * @return {number}
 */
var numJewelsInStones = function(jewels, stones) {
let sum = 0;
    let res = {}
for(let i of jewels){
    for(let j of stones){
        if( i === j){
            if(res[i]){
                res[i]+=1;
            }else{
                res[i]=1;
            }
        }
    }
}
for(let i in res){
    sum+=res[i]
}
    return sum
};

문제를 보자마자 객체 형태로 담아서 풀어야겠다고 생각을 했다. 그래서 i와 j가 같으면 res [i]를 통해서 분기 처리를 했다. 알고리즘 풀이를 처음 시작했을 때 이게 이해가 안 가고 생각을 못했는데, 현재는 어렵지 않게 생각하는 나 자신이 신기하다 ㅋㅋ

내 예전풀이

/**
 * @param {string} jewels
 * @param {string} stones
 * @return {number}
 */

var numJewelsInStones = function(jewels, stones) {
    let cnt = 0;
    for(i = 0; i < jewels.length; i++){
    let char =jewels.charAt(i)
    for(j = 0; j < stones.length; j++){
    if(char === stones.charAt(j)){
        
        cnt++;
} 
}
}
    return cnt
 
};

charAt 함수를 통해 풀이했었다. 함수를 사용한 거 보니 구글링을 했거나, 다른 분들의 답을 참고했을 것 같다.
charAr 함수는 인덱스 숫자를 인자로 넣으면, 인덱스 번호 문자열을 리턴해준다. 그 문자열을 가지고 비교를 한 뒤 결과 값을 구하는 방법이었다.

 

다른 사람 풀이

const numJewelsInStones = (J, S) => {
    const jewels = new Set(J)
    return S.split('').reduce((res, s) => res + jewels.has(s), 0)
};

has는 set 객체 안에 요소가 존재 체크를 할 수 있는 함수다. 그리고 이번에 하면서 알게 됐는데 jewels.has(s)가 true면 + 1이 되어서 정답을 도출할 수 있는 것이다.

반응형

댓글