Recent Posts
Link
250x250
오늘보다 더 나은 내일의 나에게_
자바 알고리즘 문제 풀이 Two pointers, Sliding window Q02_공통원소구하기 본문
ALGORITHM/inflearn_javaAlgorithm
자바 알고리즘 문제 풀이 Two pointers, Sliding window Q02_공통원소구하기
chan_96 2022. 3. 21. 23:45728x90
설명
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 82 3 5
코드
내가 입력한 코드
package twoPointers_SlidingWindow; import java.util.ArrayList; import java.util.Arrays; import java.util.Scanner; public class Q02 { public ArrayList<Integer> solution(int n, int[] a, int m, int[] b){ ArrayList<Integer> answer = new ArrayList<>(); Arrays.sort(a); Arrays.sort(b); int p1 = 0; int p2 = 0; while(p1<n){ if(a[p1] == b[p2]){ answer.add(b[p2]); p2=0; p1++; }else{ if(p2 < m-1){ p2++; }else{ p2=0; p1++; } } } return answer; } public static void main(String[] args) { Q02 T = new Q02(); Scanner kb = new Scanner(System.in); int n = kb.nextInt(); int[] a = new int[n]; for(int i = 0;i < n;i++){ a[i] = kb.nextInt(); } int m = kb.nextInt(); int[] b = new int[m]; for(int i = 0;i < m;i++){ b[i] = kb.nextInt(); } for(int x:T.solution(n,a,m,b)){ System.out.print(x+" "); } kb.close(); } }
해설 코드import java.util.*; class Main { public ArrayList<Integer> solution(int n, int m, int[] a, int[] b){ ArrayList<Integer> answer = new ArrayList<>(); Arrays.sort(a); Arrays.sort(b); int p1=0, p2=0; while(p1<n && p2<m){ 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 kb = new Scanner(System.in); int n=kb.nextInt(); int[] a=new int[n]; for(int i=0; i<n; i++){ a[i]=kb.nextInt(); } int m=kb.nextInt(); int[] b=new int[m]; for(int i=0; i<m; i++){ b[i]=kb.nextInt(); } for(int x : T.solution(n, m, a, b)) System.out.print(x+" "); } }
풀이 및 정리
Arrays.sort( )
=> 배열을 오름차순 정렬
while문에서 생각해볼 수 있는 조건문의 경우의 수는 3가지이다.
1. 두 배열의 각각의 인덱스 값이 같은 때
2. 배열 하나의 인덱스 값이 다른 배열의 인덱스 값보다 작은 경우
3. 위 조건 전부 아닐 경우
1번의 경우 두 배열의 인덱스 값을 모두 증가,
2번의 경우 값이 작은 인덱스 값을 증가
3번의 경우 2번의 경우가 아닌 배열의 인덱스 값을 증가
728x90
'ALGORITHM > inflearn_javaAlgorithm' 카테고리의 다른 글
자바 알고리즘 문제 풀이 Two pointers, Sliding window Q04_ 연속 부분수열 (0) | 2022.03.30 |
---|---|
자바 알고리즘 문제 풀이 Two pointers, Sliding window Q03_ 최대 매출 (0) | 2022.03.29 |
자바 알고리즘 문제 풀이 Two pointers, Sliding window Q01_두 배열 합치기 (0) | 2022.03.21 |
자바 알고리즘 문제 풀이 Array Q12_멘토링 (0) | 2022.02.22 |
자바 알고리즘 문제 풀이 Array Q11_임시반장 정하기 (0) | 2022.02.19 |
Comments