Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags more
Archives
Today
Total
관리 메뉴

ultra_dev

공통 원소 구하기(two pointers) 본문

알고리즘

공통 원소 구하기(two pointers)

ultra_dev 2023. 1. 29. 00:43

2. 공통원소 구하기

설명

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

입력

첫 번째 줄에 집합 A의 크기 N(1<=N<=30,000)이 주어집니다.

두 번째 줄에 N개의 원소가 주어집니다. 원소가 중복되어 주어지지 않습니다.

세 번째 줄에 집합 B의 크기 M(1<=M<=30,000)이 주어집니다.

네 번째 줄에 M개의 원소가 주어집니다. 원소가 중복되어 주어지지 않습니다.

각 집합의 원소는 1,000,000,000이하의 자연수입니다.

출력

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

예시 입력 1

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

예시 출력 1

2 3 5

📌 Arrays.sort로 먼저 오름차순 정렬하고 시작하자!

import java.lang.reflect.Array;
import java.util.*;
import java.util.ArrayList;
import java.util.Scanner;

class Main {
    public ArrayList<Integer> solution(int n, int m, int[] a, int[] b) {
        ArrayList<Integer> answer = new ArrayList<>();
        //정렬 해주기 Arrays.sort 메소드 기억!!!
        Arrays.sort(a);
        Arrays.sort(b);
        int p1 = 0, p2 = 0;
        while (p1 < n && p2 < m) {
            //같았을 때는 p1,p2 둘 다 증가 그래야 다음 인덱스로 가서 또 비교하지
            if (a[p1] == b[p2]) {
                answer.add(a[p1++]);
                p2++;
                //작은 쪽 증가 시키기 그래야 다음 인덱스로 넘어가서 비교하겠지
            } else if (a[p1] < b[p2]) {
                p1++;
            } else {
                p2++;
            }
        }
        return answer;
    }

        public static void main (String[]args){
            Main T = new Main();
            Scanner sc = new Scanner(System.in);
            int n = sc.nextInt();
            int[] a = new int[n];
            for (int i = 0; i < n; i++) {
                a[i] = sc.nextInt();
            }
            int m = sc.nextInt();
            int[] b = new int[m];
            for (int i = 0; i < m; i++) {
                b[i] = sc.nextInt();
            }
            for (int x : T.solution(n, m, a, b)) {
                System.out.print(x + " ");

            }

        }

    }

'알고리즘' 카테고리의 다른 글

연속부분수열  (0) 2023.02.03
최대매출(Sliding window)  (0) 2023.02.03
두 배열 합치기(two pointers)  (2) 2023.01.29
배열.멘토링  (2) 2023.01.29
배열.임시 반장 정하기  (0) 2023.01.29
Comments