본문 바로가기

프로그래머스

[프로그래머스 Level 2] 가장 큰 수 [자바]

 

 


※. 비교하기 쉽게 숫자 배열 -> 문자 배열

 

※. 배열 원소끼리 더한(s1+s2, s2+s1)것을 비교해준다.

(Arrays.sort 사용)

 

※. 정렬한 원소들을 합쳤을 때 '0'으로 시작한다면 "0"을 반환해준다.

( 000000 이 올 수 있음)

 


import java.util.*;
class Solution {
    public String solution(int[] numbers) {
        String[] copy = new String[numbers.length];
        
        for(int i = 0; i < numbers.length; i++) {
            copy[i] = String.valueOf(numbers[i]);
        }
               
        Arrays.sort(copy, new Comparator<String>(){
            

			@Override
			public int compare(String o1, String o2) {
				// TODO Auto-generated method stub
				return (o1+o2).compareTo(o2+o1);
			}
        });
        
        String answer = "";
        for(int i = copy.length-1; i >= 0; i--) {
            answer += copy[i];
        }
        if(answer.startsWith("0")) return "0";
        return answer;
    }
}

 

 


※. Arrays.sort 람다식

 

1. sort의 메소드는 Comparator메소드 하나밖에 없다. (생략가능)

2.Comparator 에는 compare 메소드 하나밖에 없다. (생략가능)

3. 정렬할 배열에는 String이 들어있기 때문에 String만 들어올 수 있다. (String 생략가능)

4. 리턴할 값을 구현한 게 한 줄 밖에 안되기 때문에 return 생략

 


import java.util.*;
class Solution {
    public String solution(int[] numbers) {
        String[] copy = new String[numbers.length];
        
        for(int i = 0; i < numbers.length; i++) {
            copy[i] = String.valueOf(numbers[i]);
        }
               
        Arrays.sort(copy, (s1, s2) -> (s1+s2).compareTo(s2+s1));
        
        String answer = "";
        for(int i = copy.length-1; i >= 0; i--) {
            answer += copy[i];
        }
        if(answer.startsWith("0")) return "0";
        return answer;
    }
}

 

 


https://dev-kani.tistory.com/32

 

[Stream API] 중간 연산 - map 메서드

개념 스트림은 파라미터로 제공되는 함수(Function관련된 함수형 인터페이스)를 적용해서 기존 요소를 새로운 요소로 매핑시키는 map이라는 메서드를 제공한다. 기존 값을 변경한다는 개념보다는

dev-kani.tistory.com

https://codechacha.com/ko/java8-stream-collect/

 

Java - Stream.collect() 사용 방법 및 예제

Collect는 Stream의 데이터를 변형 등의 처리를 하고 원하는 자료형으로 변환해 줍니다. List 또는 Set 자료형으로 변환하거나, joining 또는 Sorting하여 1개의 객체를 리턴하기도 합니다. Stream의 아이템

codechacha.com


import java.util.*;
import java.util.stream.*;
class Solution {
    public String solution(int[] numbers) {
        String answer = IntStream.of(numbers)
            .mapToObj(n -> String.valueOf(n))
            .sorted((s1, s2) -> (s2+s1).compareTo(s1+s2))
            .collect(Collectors.joining());
        if(answer.startsWith("0")) return "0";
        return answer;
    }
}