코드

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Random;
import java.util.stream.IntStream;

public class 두배열합치기_ {
	public static void main(String[] args) {
		
		int[] is1 = new Random().ints((int)(Math.random()*5000), Integer.MIN_VALUE, Integer.MAX_VALUE)
					.toArray();
		int[] is2 = new Random().ints((int)(Math.random()*5000), Integer.MIN_VALUE, Integer.MAX_VALUE)
					.toArray();
		
		int[] copyOf1 = Arrays.copyOf(is1, is1.length);
		int[] copyOf2 = Arrays.copyOf(is2, is2.length);
		
		
		StopWatch sw = new StopWatch();
		
		ArrayList<Integer> list1 = new ArrayList<Integer>();
		int p1=0,p2=0;
		
		sw.start();
		Arrays.sort(is1);
		Arrays.sort(is2);
		
		while(p1<is1.length && p2<is2.length) {
			if(is1[p1]<is2[p2] ) {
				list1.add(is1[p1++]);
			}else {
				list1.add(is2[p2++]);
			}
		}
		while(p1<is1.length) {
			list1.add(is1[p1++]);
		}
		while(p2<is2.length) {
			list1.add(is2[p2++]);
		}
		sw.stop();
		System.out.println("소요시간 : " + sw.time());
		
		sw.start();
		
		IntStream.concat(IntStream.of(copyOf1), IntStream.of(copyOf2))
		         .sorted()
		         .toArray();
		sw.stop();
		
		System.out.println("소요시간 : " + sw.time());
		
	}
}

class StopWatch{
	long startTime;
	long endTime;
	
	
	public long start() {
		return this.startTime = System.nanoTime();
	}
	
	public long stop() {
		return this.endTime = System.nanoTime();
	}
	
	public long time() {
		if(startTime == 0 && endTime == 0) {
			return -1;
		}
		return endTime - startTime;
	}
	
}

결과

소요시간 : 1521800
소요시간 : 1803400

1번째는 두포인터를 사용한 배열합치기(문제의도) , 2 번째는 궁금해서 해봤다.

 

두배열을 합친 결과를 정렬해야한다고 가정하고, 

소요시간이 엎치락 뒤치락한다...

 

데이터 건 수가 많으면 앞도적으로 스트림이 빠르다.

'자료구조&알고리즘 > 자바(Java) 알고리즘 문제풀이 : 코딩테스트 대비' 카테고리의 다른 글

연속부분수열  (0) 2022.11.23
교집합  (0) 2022.11.20
중복문자제거  (0) 2022.11.14
격자판 최대합  (0) 2022.11.12
숫자뒤집기  (0) 2022.11.10

+ Recent posts