ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Jewels and Stones (Leet code - easy)
    problem 2020. 4. 7. 01:17

     

    PROBLEM

     

    You're given strings J representing the types of stones that are jewels, and S representing the stones you have.  Each character in S is a type of stone you have.  You want to know how many of the stones you have are also jewels.

    The letters in J are guaranteed distinct, and all characters in J and S are letters. Letters are case sensitive, so "a" is considered a different type of stone from "A".

     

    Example 1:

    Input: J = "aA", S = "aAAbbbb" Output: 3

     

    Example 2:

    Input: J = "z", S = "ZZ" Output: 0

     

    Note:

    • S and J will consist of letters and have length at most 50.

    • The characters in J are distinct. 


    J에 주어진 알파벳들이 S에 몇개나 들어있는지 구하는 문제 (대 소문자는 구별되어야 한다.)


    SOLUTION

    var numJewelsInStones = function(J, S) {
        let SArr = S.split(''); // S의 element 하나하나에 접근해야하므로 Array method를 활용하기 위해 Array 형태로 바꾸어줬다.
        let count = 0; // 결과 값으로 리턴할 count를 0으로 설정한다.
        for(let i = 0; i < J.length; i++){ // J의 인덱스 하나하나를 S에 있는지 찾아야하므로 string J에 반복문을 설정한다.
            SArr.reduce(function(acc, cur){ // S Array 각각의 element를 J의 인덱스와 비교하고
                if(cur === J[i]){  // 같을 경우 count에 +1을 한 후, 다음 element 리턴,
                    count++; 
                    return cur;
                } else { // 다를 경우 다음 element를 리턴해서 다시 반복한다. 
                  return cur;
                }
            }, SArr[0])
        }
        return count; // 결과 값을 리턴한다.
    };

     

    코드를 작성하면서 빼 먹었던 부분은

     

    - reduce 문에서 SArr element와 J[i]가 다를 경우 다음 element를 리턴하는 것을 빼먹어서, 다를 경우에는 undefined가 리턴되어 더이상 비교를 할 수 없는 오류가 발생했다.

     

    - 처음에는 반복문을 중첩해서 코드를 작성하려 했으나 그렇게 될 경우, J의 인덱스와 S의 인덱스를 지정해야해서 인덱스 숫자가 함께 작동되기 때문에 J의 0번째를 S의 모든 element들과 비교하는 것이 어려움을 발견했다. 그래서 reduce를 통해 J와 S를 비교 후 다음 element를 리턴하는 방식을 활용했다.

     

     

     

    https://leetcode.com/problems/jewels-and-stones/submissions/

    댓글

Designed by Tistory.