티스토리 뷰
더보기
import java.util.*;
class Solution {
// 문제 :
// + 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
// + 0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때,
// + 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.
// + 가장 큰 수를 만들기 위해서는 앞자리 숫자가 큰 숫자를 먼저 정렬해야 한다.
// + String타입의 문자열이 숫자일 경우 int 타입과 다르게 앞자리 순서대로 정렬이 되기에 이를 활용하고자 한다.
public String solution(int[] numbers) {
String answer = "";
String [] str = new String [ numbers.length ];
// + int 타입으로 비교하는 것이 아닌 String 타입으로 비교할 것이기에,
// + numbers에 있는 int 타입의 원소를 String 타입으로 변환하여 저장할 배열 생성
for ( int i = 0; i < numbers.length; i++ ){
str [i] = String.valueOf( numbers[i] );
} //for : int 타입을 String으로 변환하여 저장
// + 내림차순 정렬 ( **** )
// + Arrays.sort 메소드에서 Comparator 인터페이스를 통해 원하는 조건대로 정렬이 가능하다.
Arrays.sort( str, new Comparator<String>(){
@Override
public int compare ( String a, String b ) {
return ( b + a ).compareTo( a + b );
} // compare
// + a.compareTo(b)
// : 2개의 문자열 a와 b를 비교한 후, 결과 값으로 a - b를 int 타입으로 반환한다.
// : a + b와 b + a로 비교하는 이유는 그 둘이 문자열 상으로 더했을때 더 큰 수를 만들어야 하기 때문이다.
// : ex ) 38과 9이 있을 때 단순히 int타입으로 생각해서 내림차순 정렬하여 389라는 숫자를 만드는 것이 아니라 938이 만들어저야 한다.
} );
// + 모든 배열의 원소가 0일 경우 0을 반환해 준다. : 예외처리
if ( str[0].equals("0") ){
return "0";
} // return
// + enhanced for문을 돌면서 answer에 더해준다.
for ( String s : str ){
answer += s;
} // enhanced for
return answer;
} // solution
} // end class
[ + String 배열에서 정렬을 진행했을 때 ]
[ + int 타입처럼 숫자의 크기대로 정렬이 되는 것이 아닌 앞자리 숫자대로 정렬이 이루어지는 것을 알 수 있다. ]
[ 참고 블로그 ]
https://ivory-room.tistory.com/43
https://ifuwanna.tistory.com/232
728x90
'코딩 테스트 [ 연습 ]' 카테고리의 다른 글
프로그래머스 - 정렬 - H-INDEX (0) | 2022.11.28 |
---|---|
프로그래머스 - SELECT - 과일로 만든 아이스크림 고르기 (0) | 2022.11.23 |
프로그래머스 - 탐욕법 ( Greedy ) - 구명 보트 (0) | 2022.11.01 |
프로그래머스 - 탐욕법 ( Greedy ) - 조이스틱 (0) | 2022.10.30 |
프로그래머스 - 탐욕법 ( Greedy ) - 큰 수 만들기 (0) | 2022.10.28 |
댓글