프라이D
프라이Develog(❁´◡`❁)
프라이D
전체 방문자
오늘
어제
  • ALL (378)
    • TDD, Cleancode with JavaScr.. (5)
    • 프로젝트 (32)
      • work (3)
      • 직접 만드는 기술 블로그 (2)
      • 데일리 옥션 (19)
      • 모락모락 (8)
    • Computer Science (1)
    • Algorithm & 자료구조 (94)
      • 알고리즘 w.JavaScript (53)
      • 자료구조 (5)
      • (인프런) 자바스크립트 알고리즘 문제풀이 (34)
    • JavaScript (45)
      • JavaScript (41)
      • 모던 자바스크립트 Deep Dive (4)
    • WEB (13)
    • 회고 (12)
    • TIL (109)
    • WIL (7)
    • Stacks (20)
      • React.js (6)
      • Next.js (1)
      • Redux (3)
      • Node.js (2)
      • GIT (2)
      • SAP (1)
    • 15일 메이킹 프로젝트 (15)
    • 이전 기록 (14)
    • ETC. (5)
    • ---------------2021 (6)
      • 내일배움단-웹개발 5주 (2)
      • 정보처리기사 (4)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

인기 글

태그

  • Til
  • 자바스크립트알고리즘
  • 비트마스크
  • 알고리즘
  • JavaScript
  • 스파르타코딩클럽
  • 자바스크립트
  • 2023 인프콘 후기
  • vanilaJS
  • 자바스크립트비트마스크
  • 내일배움단
  • MySQL
  • 모던자바스크립트딥다이브
  • 코딩프로젝트
  • nomadcoder
  • 국비지원
  • nomadcoders
  • 코드스테이츠
  • 투포인터알고리즘
  • 내일배움카드

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
프라이D

프라이Develog(❁´◡`❁)

Algorithm & 자료구조/(인프런) 자바스크립트 알고리즘 문제풀이

[알고리즘] 공통원소 구하기 - 투포인터 알고리즘

2022. 2. 8. 22:40

문제

A, B 두 개의 집합이 주어지면 두 집합의 공통 원소를 추출하여 오름차순으로 출력하는 프로그램을 작성하세요.

(두 집합의 공통원소를 오름차순 정렬하여 출력합니다.)

입력예제

5
1 3 9 5 2
5
3 2 5 7 8

풀이

function solution2(arr1, arr2) {
    let answer = [];
    let n = arr1.length;
    let m = arr2.length;
    let p1 = 0;
    let p2 = 0;
    arr1.sort((a, b) => a - b);
    arr2.sort((a, b) => a - b);
    while (p1 < n && p2 < n) {
      if (arr1[p1] === arr2[p2]) {
        answer.push(arr1[p1++]);
        p2++;
      } else if (arr1[p1] < arr2[p2]) p1++;
      else p2++;
    }

    return answer;
  }

  let a = [1, 3, 9, 5, 2];
  let b = [3, 2, 5, 7, 8];
  console.log(solution2(a, b));
  • p1, p2의 두개의 포인터가 있을 때, 가리키는 값을 비교해 더 작은 쪽의 포인터를 증가하여 이동시킨다.
  • 작은 쪽을 가리키고 있다는 것은 비교중인 다른 배열에는 그보다 작거나 같은 값이 없다는 의미이기 때문이다. 
  • p1, p2가 가리키는 값이 같을 경우 p1과 p2를 동시에 증가시킨다.

 

나의 풀이 

function solution(arr1, arr2) {
    let answer = [];
    let n = arr1.length;
    let m = arr2.length;
    let p1 = 0;
    let p2 = 0;
    arr1.sort((a, b) => a - b);
    arr2.sort((a, b) => a - b);
    while (p1 < n && p2 < n) {
      if (arr1[p1] === arr2[p2]) {
        answer.push(arr1[p1++]);
        arr2.splice(p2, 1);
      } else p1++;
    }

    return answer;
  }

  let a = [1, 3, 9, 5, 2];
  let b = [3, 2, 5, 7, 8];
  //console.log(solution(a, b));
  • 나는 하나의 포인터만 이동시키면서, 같은 값이 나오면 그 값을 answer.push 하고 비교중인 배열의 해당 요소를 splice로 삭제했다.
저작자표시 (새창열림)

'Algorithm & 자료구조 > (인프런) 자바스크립트 알고리즘 문제풀이' 카테고리의 다른 글

[알고리즘] 부분 수열의 합 2  (0) 2022.02.17
[알고리즘]연속 부분 수열 1 - 투포인터 알고리즘  (0) 2022.02.13
[알고리즘]k번째 큰 수  (0) 2022.02.06
[알고리즘]졸업선물 - sort 정렬, 완전탐색  (0) 2022.02.06
[알고리즘]멘토링 - 완전탐색  (0) 2022.02.03
    'Algorithm & 자료구조/(인프런) 자바스크립트 알고리즘 문제풀이' 카테고리의 다른 글
    • [알고리즘] 부분 수열의 합 2
    • [알고리즘]연속 부분 수열 1 - 투포인터 알고리즘
    • [알고리즘]k번째 큰 수
    • [알고리즘]졸업선물 - sort 정렬, 완전탐색
    프라이D
    프라이D
    틀린내용 정정 및 개선사항은 언제든지 댓글 달아주세요 :D

    티스토리툴바