728x90
문제
https://www.acmicpc.net/problem/1822
1822번: 차집합
첫째 줄에는 집합 A의 원소의 개수 n(A)와 집합 B의 원소의 개수 n(B)가 빈 칸을 사이에 두고 주어진다. (1 ≤ n(A), n(B) ≤ 500,000)이 주어진다. 둘째 줄에는 집합 A의 원소가, 셋째 줄에는 집합 B의 원소
www.acmicpc.net
코드
//실버4 차집합
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
let input = fs.readFileSync(filePath).toString().trim().split("\r\n");
//이분탐색 함수
function binarySearch(arr, num) {
let start = 0;
let middle = 0;
let end = arr.length - 1;
while (start <= end) {
middle = Math.floor((start + end) / 2);
if (arr[middle] < num) start = middle + 1;
else if (arr[middle] > num) end = middle - 1;
else if (arr[middle] === num) return 1; //원하는 수를 찾으면 return 1
}
return -1; //아니면 return -1
}
let A = input[1].split(" ").map((i) => parseInt(i)); //집합A를 숫자배열화
let B = input[2] //집합B를 숫자배열화 후 오름차순 정렬
.split(" ")
.map((i) => parseInt(i))
.sort((a, b) => a - b);
let answer = []; //정답을 담을 배열
for (let i = 0; i < A.length; i++) {
//A의 각 요소에 대해
if (binarySearch(B, A[i]) !== 1) {
//B에 해당 요소가 있는지 확인하여 없다면
answer.push(A[i]); //정답에 push
}
}
answer.sort((a, b) => a - b); //정답배열 오름차순 정렬
if (answer.length !== 0) {
//정답에 원소가 있다면
console.log(answer.length); //원소 개수 출력
console.log(answer.join(" ")); //빈칸을 두고 출력
} else {
//원소가 없다면
console.log(0); //0을 출력
}
'알고리즘 > BOJ' 카테고리의 다른 글
[백준] 좋다 / JavaScript / node.js (0) | 2022.02.05 |
---|---|
[백준] 숫자 카드 / JavaScript / node.js (0) | 2022.02.04 |
[백준] 접미사 배열 / JavaScript / node.js (0) | 2022.02.03 |
[백준] 시리얼 번호 / JavaScript / node.js (0) | 2022.02.03 |
[백준] 국영수 / JavaScript / node.js (0) | 2022.02.03 |