❗ 조건
조건1. 문자열의 길이가 짧은 것부터
조건2. 문자열의 길이가 같으면 사전 순으로
❗ 풀이
let input = require('fs').readFileSync('dev/stdin').toString().trim().split('\n');
const [N, M] = input[0].split(' ').map(Number);
const N_data = input.slice(1, 1 + N);
const M_data = input.slice(1 + N);
let count = 0;
const resultObject = {};
N_data.forEach((ele) => (resultObject[ele] = true));
M_data.forEach((ele) => {
if (resultObject[ele]) count++;
});
console.log(count)
1. 첫 번째 줄에 문제에 정의되어 있는 N과 M을 변수에 저장
2. N 번째 줄 까지의 문자열이 담긴 집합이 M번 째 줄 까지의 문자열이 있는지 판별하고 카운팅 할 object 정의
3. N_data를 foreach문을 통해 정의한 object에 key 값으로 삽입하고 value 값은 true로 삽입
(key값별로 boolean 타입이 아닌 정수 타입으로 하여 카운팅할 경우 카운팅 완료한 value값을 합하는 연산이 필요하므로 boolean 타입으로 지정)
4. M_data를 foreach문을 돌리고 내부에 M_data안에 있는 문자열들을 N_data가 들어있는 object 값에 들어있는지 안들어있는지 판별하고 들어있다면(결과값이 true라면) count에 1을 더함
5. 전부 더해진 count를 출력
❗ 팁
✔ includes 메서드를 사용해서 제출하면 시간초과가 발생함
✔ 중복되는 값이 존재하지 않는다는 조건이 있으므로 set을 사용할 필요는 없음
만약 중복값이 존재할 수 있다는 조건이 달린다면
const N_setArr = new Set();
for(let i = 0 ; i < input.length-1 ; i++){
N_setArr.add(arr[i]);
if(N_setArr.size == N){
break
}
}
대충 뭐 이런식으로 중복 제거를 하면 될 것 같다.
(for문을 쓴 이유는 foreach 같이 순회하는 애들은 break를 쓸 수 없기 때문)
'알고리즘 풀이' 카테고리의 다른 글
[JAVASCRIPT] 백준 1302번 문제 풀이 (0) | 2023.02.07 |
---|---|
[JAVASCRIPT] 백준 1439번 문제 풀이 (0) | 2023.01.31 |
[JAVASCRIPT] 백준 1181번 문제 풀이 (0) | 2022.12.27 |
[JAVASCRIPT] 백준 1764번 문제 풀이 (0) | 2022.12.13 |
[JAVASCRIPT] 백준 1475번 문제 풀이 (0) | 2022.12.10 |