Algorithm

[백준] 14425번: 문자열 집합 (Node.js)

sqsung 2023. 5. 19. 11:30

1. 문제 (난이도: Silver III)

 

14425번: 문자열 집합

첫째 줄에 문자열의 개수 N과 M (1 ≤ N ≤ 10,000, 1 ≤ M ≤ 10,000)이 주어진다.  다음 N개의 줄에는 집합 S에 포함되어 있는 문자열들이 주어진다. 다음 M개의 줄에는 검사해야 하는 문자열들이 주어

www.acmicpc.net

 

2. 풀이 

const [info, ...input] = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');

console.log(
  (() => {
    const [S, N] = info.split(' ').map(val => +val);
    const sample = {};

    let included = 0;

    input.splice(0, S).forEach(word => {
      sample[word] = 'placeholder';
    });

    input.forEach(word => {
      if (sample[word]) included += 1;
    });

    return included;
  })()
);

 

2-1. 풀이 설명

집합 S와 나머지 문자열을 구분해서 나눠준 뒤, 집합 S를 우선순회하며 각 단어를 키로 사용해 객체에 프로퍼티를 생성해둔다. 이때 value는 truthy값 중 아무거나 사용해도 된다. (Falsy값 사용해도 되지만 이후 비교 로직 변경 필요) 

 

나머지 문자열들을 순회하면서, 앞서 생성한 객체에 각 문자열을 키로 사용 중인 프로퍼티가 있는지 확인하고, 있으면 included 값을 1 증가한다. 반복문이 끝나면 included 변수 반환한다.