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
- 최대 길이
- 아스키코드
- 백준
- 모든행과열대각선의합
- 배열
- 점수계산
- 등수구하기
- GitHub #Commit #BaekJoon
- 뒤집은 소수
- 자바
- 연속부분수열
- Pointer
- 가장 짧은 문자거리
- ArrayList
- 격자판
- java
- 보이는 학생
- 10992
- 누적 계산
- 큰 수 출력하기
- 임시반장 정하기
- 코테준비
- 투 포인터
- 인프런
- Two Pointer
- 알고리즘
- 공통원소 구하기
- array
- 두 배열 합치기
- 10991
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 |