Notice
														
												
											
												
												
													Recent Posts
													
											
												
												
													Recent Comments
													
											
												
												
													Link
													
											
									| 일 | 월 | 화 | 수 | 목 | 금 | 토 | 
|---|---|---|---|---|---|---|
| 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
													
											
												
												- 최대 길이
 - 자바
 - Two Pointer
 - 알고리즘
 - java
 - 공통원소 구하기
 - 아스키코드
 - 투 포인터
 - 뒤집은 소수
 - 점수계산
 - Pointer
 - 등수구하기
 - 연속부분수열
 - 보이는 학생
 - 10992
 - 10991
 - array
 - 격자판
 - 인프런
 - 배열
 - 임시반장 정하기
 - 두 배열 합치기
 - 큰 수 출력하기
 - 가장 짧은 문자거리
 - GitHub #Commit #BaekJoon
 - 누적 계산
 - 코테준비
 - 백준
 - ArrayList
 - 모든행과열대각선의합
 
													Archives
													
											
												
												- Today
 
- Total
 
ezhoon
[인프런] 03_02 공통원소 구하기 본문
📖 문제
- A(N개)와 B(M개) 두 개의 집합이 주어지면 두 집합의 공통 원소를 추출 후 오름차순으로 출력하시오
 

⚠️ 주의사항
- 집합 A와 B는 정렬 돼 있지 않다.
 - pointer로 비교하기 위해서는 A와 B를 먼저 정렬 후 해결해야 한다.
 
✍️ 이해
* 1. N 개의 집합 A, M 개의 잡합 B 입력
* 2. Arrays.sort(A), Arrays.sort(B)
* 3. pi -> A의 pointer, pj -> B의 pointer
*  3-1. A[0]B[0] A[1]B[1] ~ A[N-1]B[N-1] 비교해서 같은게 있으면 answer배열에 추가
*  3-2. 중복되면 안되므로 answer에 add
* 4. return answer
✏️ 풀이
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Java03_02 {
    public ArrayList<Integer> solution (int N, int M, int[] A, int[] B) {
        ArrayList<Integer> answer = new ArrayList<>();
        int pi = 0, pj =0;
        Arrays.sort(A); // A 배열 정렬
        Arrays.sort(B); // B 배열 정렬
        while (pi < N && pj < M) {
            if(A[pi] == B[pj]){ // 공통 원소인 경우
                answer.add(A[pi++]); // A[pi] add 후 pi++
                pj++;
            }
            else if(A[pi] > B[pj]) pj++; // 큰쪽은 계속 비교해야 하므로 증가 시키지 않는다.
            else pi++;
        }
        return answer;
    }
    public static void main(String[] args) throws IOException {
        Java03_02 T = new Java03_02();
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        int[] A = new int[N];
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");
        for (int i = 0; i < N; i++) {
            A[i] = Integer.parseInt(st.nextToken());
        }
        int M = Integer.parseInt(br.readLine());
        int[] B = new int[M];
        st = new StringTokenizer(br.readLine(), " ");
        for (int i = 0; i < M; i++) {
            B[i] = Integer.parseInt(st.nextToken());
        }
        for (int x : T.solution(N, M, A, B)) System.out.print(x + " ");
    }
}

'[Java] 인프런 문제풀이 > Two pointers, Sliding window' 카테고리의 다른 글
| [인프런] 03_05 연속된 자연수의 합 (Two pointer) (0) | 2022.01.21 | 
|---|---|
| [인프런] 03_04 연속 부분 수열 (Two pointers) (0) | 2022.01.21 | 
| 투 포인터, 슬라이딩 윈도우 (0) | 2022.01.21 | 
| [인프런] 03_03 최대 매출 (0) | 2022.01.21 | 
| [인프런] 03-01 두 배열 합치기 (0) | 2022.01.21 | 
			  Comments