Jewels and Stones
포스트
취소

Jewels and Stones

771. Jewels and Stones

문제 설명

보석인 돌의 종류를 나타내는 jewels 문자열이 주어지고, 가지고 있는 돌의 종류를 나타내는 stones가 주어진다. 스톤의 각 문자는 내가 가진 스톤의 종류를 나타낸다. 보유하고 있는 스톤 중 보석이 몇 개인지 알고싶다.

문자는 대소문자를 구분하므로 "a""A"는 다른 문자를 나타낸다.

해결 방법

Map자료구조를 사용하여 해결한다.

  1. stones를 순회하며 Map에 (stone: value + 1)을 저장한다.
    • Map에 stone이 없으면 0으로 초기화한다.
  2. jewels를 순회하며 Map에 요소가 있으면 결과 값에 더한다.

풀이 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function numJewelsInStones(jewels: string, stones: string): number {
  let answer = 0;
  const frequency = new Map<string, number>();

  for (let stone of stones) {
    if (!frequency.has(stone)) frequency.set(stone, 0);
    frequency.set(stone, frequency.get(stone) + 1);
  }

  for (let jewel of jewels) {
    if (frequency.has(jewel)) answer += frequency.get(jewel);
  }
  return answer;
}

테스트 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
describe(' description', () => {
  test('example test 1', () => {
    const jewels = 'aA';
    const stones = 'aAAbbbb';
    const output = numJewelsInStones(jewels, stones);
    const expected = 3;
    expect(output).toBe(expected);
  });

  test('example test 2', () => {
    const jewels = 'z';
    const stones = 'ZZZ';
    const output = numJewelsInStones(jewels, stones);
    const expected = 0;
    expect(output).toBe(expected);
  });
});
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.