이번에 해볼 알고리즘은 랜덤한 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(); } } |
'개발자로 나아가는 나의 언어들 > JAVA' 카테고리의 다른 글
[JAVA/Softeer] [한양대 HCPC 2023] Tren del Fin del Mundo (0) | 2024.09.23 |
---|---|
[JAVA/Softeer] [한양대 HCPC 2023] 개표 (0) | 2024.09.23 |
[java] hashcode()와 equals()는 뭘까? (0) | 2021.09.26 |
자바 알고리즘만들어보기 - 드래곤볼 (0) | 2019.03.18 |
자바 알고리즘만들어보기 - 유한의계단 (1) | 2019.03.14 |