[백준-node.js-1269] 대칭 차집합

이태헌·2023년 6월 11일
0
post-thumbnail

문제

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

풀이

let input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n')
let [N,M] = [input[0].split(' ')[0],input[0].split(' ')[1]]
let arr1 = input[1].split(' ').map(Number)
let arr2 = input[2].split(' ').map(Number)

function subtraction(a,b){
    let set1 = new Set(a)
    let set2 = new Set(b)    
    let aSubtraction = new Set([...set1].filter((x)=>!set2.has(x))).size
    let bSubtraction = new Set([...set2].filter((x)=>!set1.has(x))).size
    console.log(aSubtraction+bSubtraction)
}

subtraction(arr1,arr2)
  1. 받아온 배열을 a,b를 분리해서 arr1,arr2에 넣어주고 subtraction함수에 넣어준다
  2. 두 배열을 Set에 넣어주고 filter함수로 set1을 검사할때는 set2에 있는지 확인해서 없으면 셋에 넣어주고 사이즈를 구해서 두개를 더해준다.

다른 풀이

const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
const [_, arr1, arr2] = require('fs').readFileSync(filePath).toString().trim().split('\n');

const a = arr1.split(' ');
const b = arr2.split(' ');

let cnt = a.length + b.length;
const aAndB = [...new Set(a.concat(b))];

console.log(aAndB.length * 2 - cnt);

수학적으로 아주 쉽게 접근한 사람인데 차집합의 갯수를 구하는 공식은 n(A-B) = n(AUB) - n(B), n(B-A) = n(AUB) - n(A) 이니까 문제에서 A,B 두 집합 모두 차집합을 구해야하니 n(A-B) + n(B-A) = 2 * n(AUB)- (n(A)+n(B))이므로 두 배열을 합쳐서 중복을 제거한 aAndB에 2를 곱하고 a,b의 길이를 구해서 빼준것..

0개의 댓글