-
[프로그래머스] 가장 큰 수 - 정렬알고리즘/문제풀기 2019. 5. 1. 23:31
처음 문제를 풀 때 아래의 코드 처럼 새로운 배열을 만들어서 정렬한 후 마지막 배열을 뽑아 오려고 했다.
public static String solution(int[] numbers) { String answer = ""; //정답을 저장할 문자열 int nlength = numbers.length; int arrlength = 1; //새로운 배열을 저장할 배열크기 String[] str = new String[nlength]; for(int i=0; i<nlength; i++) { str[i] = String.valueOf(numbers[i]); //하나씩 배열에서 가져와서 String배열으로 저장 arrlength *= i+1; } String[] temp = new String[arrlength]; for(int i=0; i<arrlength; i++) { //새로운 String배열에 숫자를 합친거 넣기 for(int j=0; j<nlength; j++) { temp[i] += str[j]; } temp[i].replace("null",""); } Arrays.sort(temp); //배열 정렬 answer = temp[arrlength]; return answer; //마지막 배열 가져오기 }
public static String solution(int[] numbers) { int nlength = numbers.length; String[] str = new String[nlength]; for(int i=0; i<nlength; i++) { str[i] = String.valueOf(numbers[i]); //int배열을 string 배열로 바꾸기 } Arrays.sort(str, (o1, o2) -> (o2 + o1).compareTo(o1 + o2)); //배열을 정렬시킴 if(str[0].equals("0")) return "0"; // 0이면 0리턴 StringBuilder sb = new StringBuilder(); // for(int i=0; i<str.length; i++) { sb.append(str[i]); //정렬된 문자열을 뒤에 추가 시킨다 } return sb.toString(); }
배열을 정렬 할 때 [3, 31, 34] 인 경우 문자열로 정렬했을 때, 34 31 3 으로 정렬이 된다. 그래서 자바 람다식을 이용해서 3 과 31을 정렬하기 위해, 331 과 313을 비교해서 문자열로서 더 큰 문자열을 만드는 순으로 정렬했다.
람다식이란?
- 식별자 없이 실행 가능한 함수
람다식 사용법
(매개변수, ... ) -> { 실행문 }
매개변수는 자유롭게 지정 가능함.
코드에서 람다식 사용
(o1, o2) -> (o2 + o1).compareTo(o1 + o2)
매개변수를 o1, o2로 지정
(o2 + o1).compareTo(o1 + o2) 이 부분이 실행문
'알고리즘 > 문제풀기' 카테고리의 다른 글
[프로그래머스] 쇠막대기 (스택/큐) (0) 2019.06.04 [프로그래머스] 타겟넘버 - DFS (0) 2019.05.21 [프로그래머스] K번째 수 - 정렬 (0) 2019.04.20 [프로그래머스] 위장 - 해시 (0) 2019.04.17 [프로그래머스] 전화번호 목록 - 해시 (0) 2019.04.16 댓글