본문 바로가기
개발자로 나아가는 나의 언어들/JAVA

자바 알고리즘만들어보기 - 가장 큰 수 알고리즘(백준알고리즘)

by 승싱생숭 2019. 3. 15.
728x90

이번에 해볼 알고리즘은 랜덤한 10개의 숫자를 받아 그 숫자들을 조합해 가장 큰수를 만들어 내는것인데요!

그 랜덤한 숫자는 1~99까지 나오게 설정을 하고 두자리수 수들은 따로 분리시키지않고 그 형태를 유지시켜 조합을 하는 방식의 알고리즘 입니다!

51과 5 가있다면 515가 나올 수 있고 551이 나올 수 있는데 저희가 뽑아야할 숫자는 551이라는 수인것이죠 !

백준알고리즘에서 본 알고리즘을 토대로 만들어 보았고 부족한 해답일 수 있습니다~ 코드에 정답은 없으니 자기방식대로 진행하시고 참고만 하세요 ㅎㅎ



===============================================================================================

package algorithm;


public class BigNumber {

public static void main(String[] args) {

// 랜덤 숫자 만들어서 배열에 넣기

int[] randomNum = new int[10];


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

randomNum[i] = (int) (Math.random() * 99 + 1);

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

if (randomNum[i] == randomNum[j]) {

randomNum[i] = (int) (Math.random() * 99 + 1);

j = 0;

}

}

}

// 한 자리수 *11 하기

int[] numArray = new int[10];

String[] check = new String[10];

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

if(randomNum[i] <10) {

numArray[i] = randomNum[i]*11;

check[i] = "check";

} else {

numArray[i] = randomNum[i];

}

}

// 큰 수 부터 정렬

int tempA; String tempC;

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

for(int j=0; j<numArray.length-i-1; j++) {

if(numArray[j] < numArray[j+1]) {

tempA = numArray[j];

tempC = check[j];

numArray[j] = numArray[j+1];

check[j] = check[j+1];

numArray[j+1] = tempA;

check[j+1]=tempC;

}

}

}

// 한자리수 *11 한거 /11해주기.

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

if(check[i] != null) {

numArray[i] = numArray[i]/11;

}

}

// 프린트

arrayPrint("숫자: ", randomNum);

arrayPrint("정렬: ", numArray);

}

public static void arrayPrint(String ex, int[] array) {

System.out.print(ex);

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

System.out.print(array[i] + " ");

}

System.out.println();

}

}



728x90