본문 바로가기
알고리즘 문제풀이/LeetCode

[C++] 문자열에서 특정 문자의 개수를 구하는 완전탐색 알고리즘

by 티옌.liy 2019. 2. 1.

원문 : https://leetcode.com/problems/jewels-and-stones/





제목 : Jewels and Stones ( 보석과 돌맹이 )

난이도 : 쉬움

정답률 82.6%

LeetCode 사이트에서 가장 쉬운 알고리즘 문제입니다.





문제



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의 문자열을 비교하고, 같은 문자가 몇개가 있는지 구하는 알고리즘 입니다.


Example 1:  입력값 J에  'a'  와  'A'  2가지의 문자가 있고 S 에는  'a'  와  'A' ,  'b'  3가지 중 

  같은 문자는 3개 이므로 출력값은 3이 됩니다.


Example 2: 입력값 J 에  'z'   1가지의 문자가 있고, 입력값 S에는  'Z'  1가지 문자가 있습니다. 

  같은 문자는 0개 이므로 출력값는 0입니다.


따라서, 대소문자를 구별하며, 같은 문자가 몇개인지를 찾는 알고리즘을 구현해야 합니다.



알고리즘 구현


class Solution {

public:

    int numJewelsInStones(string J, string S) {


int count = 0;


  for (unsigned int n = 0; n < J.size(); n++)

{

char temp = J[n];


for (unsigned int i = 0; i < S.size(); i++)

{

if (temp == S[i]) 

{

count++;

}

}

}


return count;

    }

};


입력값 J = "aA"

입력값 S = "aAAbbbb"


J[0] = 'a' 와 S의 모든 문자를 비교할 시 같은 문자는 1개이며 count를 1이 증가한다

J[1] = 'A' 와 S의 모든 문자를 비교할 시 같은 문자는 2개이며 count를 2이 증가한다.


따라서 count = 1 + 2 = 3 이며

출력값은 3입니다.


이 과정에서 모든 문자를 비교하고 탐색하므로 완전탐색형임을 알 수 있습니다.




성능



런타임 시간은 0ms 입니다.




댓글