https://www.acmicpc.net/problem/10816
- 사용언어 : node.js
- 알고리즘 : 자료구조, 정렬, 이분탐색, 해시를 사용한 집합과 맵
- Solved.ac Tier : Siver IV
node.js 코드
1. 문제 정리
10815번 문제와 유사한 문제이다. 4줄의 입력이 들어오며, 첫 째줄엔 정수 N, 둘째 줄엔 N개의 정수, 셋째 줄엔 정수 M, 넷째 줄엔 M개의 정수가 들어온다. 총 카드 50만 개가 들어올 수 있다. N개의 카드들을 모두 저장하고 있어야 하는데, 저장한다 하더라도 값을 탐색할 때 모두 탐색할 수 없기 때문에, Object를 이용하여 문제를 해결하였다.
for(let i = 0; i < N; i++){
N_cards[i] = parseInt(N_cards[i])
ansObj[N_cards[i]] ? ansObj[N_cards[i]]++ : ansObj[N_cards[i]] = 1;
}
N개 카드들을 모두 Object에 key, value 형태로 저장하고, 해당 key 값이 존재 한다면 value를 1씩 올려주고, 아니면 value를 1로 만들어주는 과정을 첫 번째 for문에서 처리하였다.
for(let i = 0; i < M; i++){
M_cards[i] = parseInt(M_cards[i]);
ansObj[M_cards[i]] ? ans.push(ansObj[M_cards[i]]): ans.push(0);
}
M개의 카드들을 모두 검색하여 해당 값이 아까 만든 Object에 key값으로 존재하는지 여부를 판별하고 있다면 value값을 가져오도록 만들었다.
Object를 사용하는 것 보다, ES6문법에 Map을 이용하는 것도 좋은 방법이다.
2. 완성 코드
const filePath = process.platform === 'linux' ? '/dev/stdin' : 'ans.txt';
const input = require('fs').readFileSync(filePath).toString().trim().split("\n");
let N = input[0], N_cards = input[1].split(" "), M = input[2], M_cards = input[3].split(" ");
let ansObj = new Object();
const ans = new Array();
for(let i = 0; i < N; i++){
N_cards[i] = parseInt(N_cards[i])
ansObj[N_cards[i]] ? ansObj[N_cards[i]]++ : ansObj[N_cards[i]] = 1;
}
for(let i = 0; i < M; i++){
M_cards[i] = parseInt(M_cards[i]);
ansObj[M_cards[i]] ? ans.push(ansObj[M_cards[i]]): ans.push(0);
}
console.log(ans.join(" "))
'백준 알고리즘 > Lang-node.js' 카테고리의 다른 글
[백준/node.js] 10828 스택 (0) | 2023.01.08 |
---|---|
[백준/node.js] 11656 접미사 배열 (0) | 2023.01.04 |
[백준/node.js] 10867 중복 빼고 정렬하기 (0) | 2023.01.03 |
[백준/node.js] 10815 숫자카드 (0) | 2023.01.02 |
[백준/node.js] 1012번 유기농 배추 (0) | 2022.04.12 |