[백준/BOJ] 1269번 대칭 차집합 (Javascript / Node js)
2023. 10. 6. 18:03ㆍ코딩 테스트 (BOJ)
https://www.acmicpc.net/problem/1269
문제 해설
대칭 차집합의 개수는 집합 A 와 B가 있을때 A에서 A와B의 교집합을 뺀 원소의 개수와 B에서 A와B의 교집합을 뺀 원소의 개수의 합이다.
결국 A와 B 원소의 개수를 더한 뒤, 교집합의 개수를 한번 빼면 합집합이 되고, 합집합에서 한번 더 교집합의 개수를 빼면 문제에서 말하는 대칭 차집합의 원소의 개수가 나온다.
전체 코드
const fs = require("fs");
const input = fs.readFileSync("../input.txt").toString().trim().split("\n").map(item=> item.split(" "));
input.shift();
const A = new Set(input[0].map(item=> Number(item)));
const B = new Set(input[1].map(item=> Number(item)));
var cnt = 0;
for(let value of A){ // set은 인덱스가 없기 때문에 for ... of 를 사용해야 한다.
if(B.has(value)) cnt ++;
}
console.log(A.size + B.size - (cnt*2));
로직을 구현할 때 처음엔 Map을 사용하려 했는데 Map과 Object는 [Key-Value] 로 입력 받아야 하니, input의 배열을 직접 넣어주는 부분에서 문제가 있어 한번의 가공작업이 필요했다.
그래서 has 함수도 사용이 가능하고 Key 값도 필요 없는 Set을 사용했다. 문제에서 입력 받는 값들은 집합의 원소이기 때문에 애당초 중복된 값이 존재하지 않아서 문제될 것도 없었다.
배운점
이번 문제를 풀며 느낀점은 수고롭지만 Set, Map, Object, Array, List 등의 데이터 구조들에 대해서 수고롭지만 완벽하게 정리를 하고 차이점들을 확실히 인지해둘 필요가 있을 것 같다는 것이다. 이에 대한 정리는 따로 포스팅 후 이 게시글에 차후 링크를 걸어두던지 하겠다.
'코딩 테스트 (BOJ)' 카테고리의 다른 글
[백준/BOJ] 1934번 최소공배수 (Javascript / Node js) (0) | 2023.10.10 |
---|---|
[백준/BOJ] 11478번 서로 다른 부분 문자열의 개수 (Javascript / Node js) (0) | 2023.10.10 |
[백준/BOJ] 1764번 듣보잡 [Javascript / Node js] (0) | 2023.10.06 |
[백준/BOJ] 18870번 좌표 압축 (Javascript/ Node js) (0) | 2023.10.04 |
[백준/BOJ] 2745번 진법 변환 (Node js / Javascript) (0) | 2023.09.14 |