Languages/Java2014.06.13 23:41

그런데 이 밤중에 저는 왜 이런 짓을 하고 있는 걸까요? (수줍)



/*

 * Source.java

 */

final class Source {


private final int[] array;

private int index;

Source(int[] array) {

this.array = array;

this.index = 0;

}

static Source min(Source a, Source b) {

if ( a.index < a.array.length && b.index < b.array.length ) {

if ( a.array[a.index] < b.array[b.index] ) {

return a;

} else {

return b;

}

} else if ( a.index >= a.array.length ) {

return b;

} else {

return a;

}

}

int getValue() {

return this.array[this.index];

}


void advanceIndex() {

++this.index;

}

boolean isEmpty() {

return ( this.index >= this.array.length );

}

}


/*

 * Main.java

 */

import java.util.Arrays;

import java.util.Random;


public class Main {

private static Random generator = new Random();

private static int[] getSortedArray(int length) {

int[] ret = new int[length];

for ( int i = 0; i < length; ++i ) {

ret[i] = generator.nextInt(1000);

}

Arrays.sort(ret);

return ret;

}

public static int[] threeWayMergeSort(int[] a, int[] b, int[] c) {

Source one = new Source(a);

Source two = new Source(b);

Source three = new Source(c);

int[] ret = new int[a.length + b.length + c.length];

int retIndex = 0;

while ( !one.isEmpty() || !two.isEmpty() || !three.isEmpty() ) {

Source min = Source.min(one, Source.min(two, three));

ret[retIndex++] = min.getValue();

min.advanceIndex();

}

return ret;

}

public static void main(String[] args) {

int[] a = getSortedArray(100);

int[] b = getSortedArray(100);

int[] c = getSortedArray(100);


int[] result = threeWayMergeSort(a, b, c);


                for ( int i = 0; i < result.length; ++i ) {

System.out.printf("%4d ", result[i]);

if ( ((i+1)%10)==0 ) System.out.println();

}

}

}


이런거 짜보라고 했는데 칠판에 코드 못 그렸으면 열좀 받았겠죠? 네 그래서 한번 해봤습니다 ㅎㅎ 사실 면접 볼때 이런 유형의 문제가 나오면 제일 먼저 드는 생각은 "이거 못풀면 진짜 개망신이겠군..." 이죠 (발그레) 그러다 진짜 못풀면 하루 종일 잠이 안온다능...

저작자 표시 비영리 변경 금지
신고
Posted by 이병준

소중한 의견, 감사합니다. ^^