[백준/BOJ] 1269번 대칭 차집합 (Javascript / Node js)

2023. 10. 6. 18:03코딩 테스트 (BOJ)

https://www.acmicpc.net/problem/1269

 

1269번: 대칭 차집합

첫째 줄에 집합 A의 원소의 개수와 집합 B의 원소의 개수가 빈 칸을 사이에 두고 주어진다. 둘째 줄에는 집합 A의 모든 원소가, 셋째 줄에는 집합 B의 모든 원소가 빈 칸을 사이에 두고 각각 주어

www.acmicpc.net

문제 해설

대칭 차집합의 개수는 집합 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 등의 데이터 구조들에 대해서 수고롭지만 완벽하게 정리를 하고 차이점들을 확실히 인지해둘 필요가 있을 것 같다는 것이다. 이에 대한 정리는 따로 포스팅 후 이 게시글에 차후 링크를 걸어두던지 하겠다.