백준 11728 자바

손찬호·2024년 6월 26일
0

알고리즘

목록 보기
70/91

https://www.acmicpc.net/problem/11728

아주 간단한 문제였다.

풀이 아이디어

두 배열을 각각 받고 오름차순인 하나의 배열로 합쳐서 출력한다.
더 최적화를 하고 싶다면 병합정렬을 사용해서 A,B 각각의 작은 순서로 배열에 저장한다.
이후 각 원소 사이에 " "를 추가해서 더해준다.

풀이 코드

import java.util.*;
import java.io.*;
public class _11728 {
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int n = Integer.parseInt(st.nextToken());
        int m = Integer.parseInt(st.nextToken());
        
        ArrayList<Integer> sumList = new ArrayList<>();

        // A 배열 입력
        st = new StringTokenizer(br.readLine());
        for(int i=0; i<n; i++){
            sumList.add(Integer.parseInt(st.nextToken()));
        }
        // B 배열 입력
        st = new StringTokenizer(br.readLine());
        for(int i=0; i<m; i++){
            sumList.add(Integer.parseInt(st.nextToken()));
        }
        Collections.sort(sumList);
        StringBuilder sb = new StringBuilder();
        for(int num: sumList){
            sb.append(num+" ");
        }
        System.out.println(sb.toString());
    }
}

최적화

좀 더 최적화를 해보고 싶어서 고민해봤는데
원래는 sumList에 모두 추가하고 한 번에 정렬한 뒤에 StringBuilder에 추가한다면

병합정렬을 사용해서 두 배열을 각각 크기순서대로 배열에 저장하고 출력한다면
좋을 것 같았다.

import java.util.*;
import java.io.*;
public class _11728 {
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int n = Integer.parseInt(st.nextToken());
        int m = Integer.parseInt(st.nextToken());

        // A 배열 입력
        int[] A = new int[n+1];
        st = new StringTokenizer(br.readLine());
        for(int i=0; i<n; i++){
            A[i] = Integer.parseInt(st.nextToken());
        }
        A[n] = Integer.MAX_VALUE;

        // B 배열 입력
        int[] B = new int[m+1];
        st = new StringTokenizer(br.readLine());
        for(int i=0; i<m; i++){
            B[i] = Integer.parseInt(st.nextToken());
        }
        B[m] = Integer.MAX_VALUE;

        // A,B 배열 병합정렬로 합치기
        int a_index = 0;
        int b_index = 0;
        StringBuilder sb = new StringBuilder();
        for(int i=0;i<n+m;i++){
            if(A[a_index] <= B[b_index]){
                sb.append(A[a_index++]+" ");
            }
            else{
                sb.append(B[b_index++]+" ");
            }
        }

        // 결과 출력
        System.out.println(sb.toString());
    }
}

대략 200ms정도 단축했다!!

profile
매일 1%씩 성장하려는 주니어 개발자입니다.

0개의 댓글

관련 채용 정보