❤️ github 주소 : https://github.com/qkralswl689/programmers/tree/main/out/production/exercise
1주차_두번째 문제 : Programmers 가장큰수
https://programmers.co.kr/learn/courses/30/lessons/42746
나는 새로운 배열에 numbers 의 값을 String 타입으로 변환하고 또다른 배열에 숫자를 1+2+3 , 2+1+3, 3+1+2...등으로 모두 넣어 비교하여 가장 큰 값을 출력하려고했지만 구현에 실패했다..!
String[] tmp = new String[numbers.length];
for(int i = 0; i < numbers.length; i++ ){
tmp[i] = String.valueOf(numbers[i]);
}
String[] answertmp = new String[numbers.length * numbers.length];
for (int i = 0; i < numbers.length; i++){
for(int j = 1; j <= numbers.length; j++ ){
}
}
compareTo 사용법과,람다함수 사용법을 배울 수 있었다
// 풀이
// 숫자 -> 문자 -> 내림차순정렬 -> 조합
int[] numbers = {6,10,2};
/* // 문자로 변환
String[] strNum = new String[numbers.length];
for(int i = 0; i < numbers.length; i++){
strNum[i] = "" + numbers[i];
}*/
// 문자로 변환 -> java8부터는 스트림 사용할 수 있다 -> 코드 간결하게 할 수 있따
String answer = IntStream.of(numbers)
.mapToObj(String :: valueOf)
.sorted((s1,s2) -> (s2+s1).compareTo(s1+s2))
.collect(Collectors.joining());
/* // 내림차순 (버블소트) -> 시간 많이 잡아먹음 시간초과 뜸
for(int i = 0; i < strNum.length -1; i++){
for(int j = i + 1; j < strNum.length; j++){
String s1 = strNum[i];
String s2 = strNum[j];
// 비교
if((s1+s2).compareTo(s2+s1)< 0){ // (s1+s2)의 값이 (s2+s1) 값보다 적을때
// 자리를 바꾼다
strNum[i] = strNum[j];
strNum[j] = s1;
}
}
}*/
/* // 내림차순
Arrays.sort(strNum, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
return (s2+s1).compareTo(s1+s2);
}
});*/
/* // 내림차순 -> java8부터 사용 가능한 람다함수 사용하여 코드를 간결하게 수정
Arrays.sort(strNum,(s1,s2) ->
(s2+s1).compareTo(s1+s2));
// 조합
String answer = "";
for(String s : strNum){
answer += s;
}*/
/* // 첫번째 값이 0이라면
if(answer.charAt(0) == '0'){
answer = "0" ;
}*/
// 첫번째 값이 0이라면 -> 위보다 권장하는 방법
if(answer.startsWith("0")){
answer = "0" ;
}
System.out.println(answer);