Recent Posts
Link
250x250
오늘보다 더 나은 내일의 나에게_
자바 알고리즘 문제 풀이 Two pointers, Sliding window Q01_두 배열 합치기 본문
ALGORITHM/inflearn_javaAlgorithm
자바 알고리즘 문제 풀이 Two pointers, Sliding window Q01_두 배열 합치기
chan_96 2022. 3. 21. 22:55728x90
설명
오름차순으로 정렬이 된 두 배열이 주어지면 두 배열을 오름차순으로 합쳐 출력하는 프로그램을 작성하세요.
입력
첫 번째 줄에 첫 번째 배열의 크기 N(1<=N<=100)이 주어집니다.
두 번째 줄에 N개의 배열 원소가 오름차순으로 주어집니다.
세 번째 줄에 두 번째 배열의 크기 M(1<=M<=100)이 주어집니다.
네 번째 줄에 M개의 배열 원소가 오름차순으로 주어집니다.
각 리스트의 원소는 int형 변수의 크기를 넘지 않습니다.
출력
오름차순으로 정렬된 배열을 출력합니다.
예시 입력1
예시 출력3
1 3 5
5
2 3 6 7 91 2 3 3 5 6 7 9
코드
내가 입력한 코드
package twoPointers_SlidingWindow; import java.util.Scanner; public class Q01 { public int[] solution(int n, int[] arr1, int m, int[] arr2) { int[] answer = new int[n+m]; int tmp = 0; for (int i = 0; i < answer.length; i++) { if(i >= arr1.length) { answer[i] = arr2[i-arr1.length]; }else { answer[i] = arr1[i]; } tmp = answer[i]; int x = 0; for (int j = 0; j <= i; j++) { if(answer[j] > tmp) { x = answer[j]; answer[j] = tmp; tmp = x; answer[i] = x; } } } return answer; } public static void main(String[] args) { Q01 T = new Q01(); Scanner kb = new Scanner(System.in); int n = kb.nextInt(); int[] arr1 = new int[n]; for (int i = 0; i < n; i++) { arr1[i] = kb.nextInt(); } int m = kb.nextInt(); int[] arr2 = new int[m]; for (int i = 0; i < m; i++) { arr2[i] = kb.nextInt(); } for(int x:T.solution(n, arr1, m, arr2)) { System.out.print(x + " "); } } }
해설 코드
import java.util.*; class Main { public ArrayList<Integer> solution(int n, int m, int[] a, int[] b){ ArrayList<Integer> answer = new ArrayList<>(); int p1=0, p2=0; while(p1<n && p2<m){ if(a[p1]<b[p2]) answer.add(a[p1++]); else answer.add(b[p2++]); } while(p1<n) answer.add(a[p1++]); while(p2<m) answer.add(b[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+" "); } }
풀이 및 정리
배열 합치기 문제로써 제일 간단한 문제이다.
나는 배열로 받았는데 ArrayList를 사용하면 좀 더 효율적인 코드로 작성할 수 있다.
풀이에서는 ArrayList를 만들고 p1, p2 변수를 만들어 인덱스 변수로 사용하였다.
while문을 통해 정수 배열 n, m에서 각각의 인덱스를 비교해 작은 값을 ArrayList의 answer 변수에 순서대로 넣어준다. 그렇게 하다 보면 두 배열 중 하나의 배열은 answer에 다 들어갔지만 나머지 배열의 원소들은 들어가지 않았을 수 있다. 그래서 추가로 whlie문을 통해 남은 원소들의 값을 answer에 넣어준다.
728x90
'ALGORITHM > inflearn_javaAlgorithm' 카테고리의 다른 글
자바 알고리즘 문제 풀이 Two pointers, Sliding window Q03_ 최대 매출 (0) | 2022.03.29 |
---|---|
자바 알고리즘 문제 풀이 Two pointers, Sliding window Q02_공통원소구하기 (0) | 2022.03.21 |
자바 알고리즘 문제 풀이 Array Q12_멘토링 (0) | 2022.02.22 |
자바 알고리즘 문제 풀이 Array Q11_임시반장 정하기 (0) | 2022.02.19 |
자바 알고리즘 문제 풀이 Array Q10_봉우리 (0) | 2022.02.19 |
Comments