-
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/
'problem' 카테고리의 다른 글
이 문제들을 다 풀면 stack, queue 정복! (0) 2020.05.02 이 문제들을 다 풀면 this 정복! (0) 2020.04.30 이 문제들을 다 풀면 객체지향 JavaScript, Value vs. Reference 이해 끝! (0) 2020.04.06 이 문제들을 다 풀면 scope 이해 끝 (0) 2020.04.02 closure 헷갈리는 문제 (0) 2020.04.02 -