A, B 두 개의 집합이 주어지면 두 집합의 공통 원소를 추출하여 오름차순으로 출력하는 프로그램을 작성하세요.
첫 번째 줄에 집합 A의 크기 N(1<=N<=30,000)이 주어집니다.
두 번째 줄에 N개의 원소가 주어집니다. 원소가 중복되어 주어지지 않습니다. 세 번째 줄에 집합 B의 크기 M(1<=M<=30,000)이 주어집니다.
네 번째 줄에 M개의 원소가 주어집니다. 원소가 중복되어 주어지지 않습니다. 각 집합의 원소는 1,000,000,000이하의 자연수입니다.
두 집합의 공통원소를 오름차순 정렬하여 출력합니다.
입력
5
13952
5
32578
출력
235
const solution = (input) => {
const arr = input.split("\n");
const [arr1, arr2] = [
arr[1]
.split("")
.map(Number)
.sort((a, b) => a - b),
arr[3]
.split("")
.map(Number)
.sort((a, b) => a - b),
];
let [p1, p2] = [0, 0];
const answer = [];
while (p1 < arr1.length && p2 < arr2.length) {
if (arr1[p1] === arr2[p2]) {
answer.push(arr1[p1]);
p1++;
p2++;
} else if (arr1[p1] < arr2[p2]) {
p1++;
} else {
p2++;
}
}
return answer.join("");
};
const a = solution("5\n13952\n5\n32578");
console.log(a); // 235
// 또 다른 해법
const solution = (input) => {
const arr = input.split("\n");
const [arr1, arr2] = [arr[1].split(""), arr[3].split("")];
let [p1, p2] = [0, 0];
const answer = [];
for (let i = 0; i < arr1.length; i++) {
for (let j = 0; j < arr2.length; j++) {
if (arr1[i] === arr2[j]) answer.push(arr1[i]);
}
}
return answer.sort((a, b) => a - b).join("");
};
const a = solution("5\n13952\n5\n32578");
console.log(a); // 235