문제
- A, B 두 개의 집합이 주어지면 두 집합의 공통 원소를 추출하여 오름차순으로 출력하는 프로그램을 작성하세요.
입력
- 첫 번째 줄에 집합 A의 크기 N(1<=N<=30,000)이 주어집니다.
- 두 번째 줄에 N개의 원소가 주어집니다. 원소가 중복되어 주어지지 않습니다.
- 세 번째 줄에 집합 B의 크기 M(1<=M<=30,000)이 주어집니다.
- 네 번째 줄에 M개의 원소가 주어집니다. 원소가 중복되어 주어지지 않습니다.
- 각 집합의 원소는 1,000,000,000이하의 자연수입니다.
출력
- 두 집합의 공통원소를 오름차순 정렬하여 출력합니다.
입출력 예제
풀이 방식을 정리해보자.
1. 먼저 배열 A[N] 와 B[M] 를 선언하고, 값을 입력받는다.
2. 바로 메소드 구현으로 넘어가보자.
3. 배열로 결과값을 출력할 것이기에 ArrayList 형으로 메소드를 선언한다.
4. Arrays.sort() 를 이용해서 각 배열안에 인자 값들을 오름차순으로 정렬한다.
- Arrays.sort() : 베열을 자동으로 오름차순으로 정렬해준다.
5. 각 배열에서 사용할 포인터 p1, p2 를 선언하고 0으로 초기화한다.
- 인덱스와 비슷한 개념이라고 간단히 이해하고 넘어가자.
6. 두 배열 중 하나라도 배열의 마지막에 이르면 종료하도록 while 문을 작성한다.
- N은 a[ ] 배열의 최대개수이고 M은 b[ ] 배열의 최대개수이므로 전부 다 돌았으면 종료해야 한다.
7. 두 배열에 동일한 값이 있으면 둘 중 하나의 배열에 값을 결과값 배열에 넣어주고, 두 배열에 포인터를 증가시킨다.
8. 두 배열중에 더 작은 값이 있으면, 작은 값이 있는 배열만 포인터를 증가시킨다.
- A[ ] = 1, 2, 3 / B[] = 2, 3, 4 이라고 가정해보자.
- A[ ]에서 1이 더 작으므로 1을 결과값 배열에 넣는다.
- 이 때에 B[ ] 배열에 2 가 있는데, 이 값이 A[ ] 배열에 있으므로 A[1] 과 B[0] 을 비교해야한다.
- 즉, B[ ] 배열에 포인터는 증가하면 안된다.
수행 결과를 확인한다.
해당 글은 인프런 > 자바(Java) 알고리즘 문제풀이 : 코딩테스트 대비(김태원)강의를 참고하여 작성하였습니다.
'알고리즘 > 인프런' 카테고리의 다른 글
섹션 3. Two pointers, Sliding window[효율성 : O(n^2)-->O(n)] 4. 연속부분수열 (0) | 2022.09.27 |
---|---|
섹션 3. Two pointers, Sliding window[효율성 : O(n^2)-->O(n)] 3. 최대 매출 (0) | 2022.09.26 |
섹션 3. Two pointers, Sliding window[효율성 : O(n^2)-->O(n)] 1. 두 배열 합치기 (2) | 2022.09.23 |
섹션 2. Array(1, 2차원 배열)_12. 멘토링 (0) | 2022.09.22 |
섹션 2. Array(1, 2차원 배열)_11. 임시반장 정하기 (0) | 2022.09.22 |