본문으로 바로가기

24. 두 배열 합치기

category 스터디/코테 문제풀이 2024. 3. 20. 14:29
1. 두 배열 합치기
 

설명

오름차순으로 정렬이 된 두 배열이 주어지면 두 배열을 오름차순으로 합쳐 출력하는 프로그램을 작성하세요.

입력

첫 번째 줄에 첫 번째 배열의 크기 N(1<=N<=100)이 주어집니다.

두 번째 줄에 N개의 배열 원소가 오름차순으로 주어집니다.

세 번째 줄에 두 번째 배열의 크기 M(1<=M<=100)이 주어집니다.

네 번째 줄에 M개의 배열 원소가 오름차순으로 주어집니다.

각 리스트의 원소는 int형 변수의 크기를 넘지 않습니다.

출력

오름차순으로 정렬된 배열을 출력합니다.

예시 입력 1 

3
1 3 5
5
2 3 6 7 9

예시 출력 1

1 2 3 3 5 6 7 9

 

  • 투포인터로 풀기

풀이

package org.example;

import java.util.ArrayList;
import java.util.Scanner;

public class Main {
    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 main = new Main();
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[] a = new int[n];
        for(int i=0; i<n; i++){
            a[i] = in.nextInt();
        }
        int m = in.nextInt();
        int[] b = new int[m];
        for(int i=0; i<m; i++){
            b[i] = in.nextInt();
        }

        for(int x : main.solution(n, m, a, b)){
            System.out.print(x + " ");
        }
    }
}
  •  각 배열이 끝나기 전까지 루프 돌리고 루프 안에서 크기 비교 후 answer 에 추가해준다
  • 루프 끝난 뒤, 비교가 끝난 뒤 남은 요소들을 answer 에 넣기 위해 while 문을 또 돌린다!
  • 후위 ++ 을 사용해서 비교가 끝난건 배열 포인터를 뒤로 이동해주는 방식의 풀이과정이다.

'스터디 > 코테 문제풀이' 카테고리의 다른 글

41.학급 회장(해쉬)  (0) 2024.10.01
25. 공통원소 구하기  (0) 2024.03.20
21. 봉우리  (0) 2024.03.04
18. 점수 계산  (0) 2024.02.28
17. 뒤집은 소수  (0) 2024.02.28