[Algorithm] 공통원소 구하기 (javaScript)

swing·2023년 7월 4일
0

[Algorithm]

목록 보기
59/96

문제

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
profile
if(기록📝) 성장🌱

0개의 댓글