본문 바로가기
자료구조 & 알고리즘/문제풀이

가장 큰 수 - 프로그래머스 (Java, Level 2)

by 넬준 2022. 2. 9.

 

import java.util.Arrays;
import java.util.Comparator;

class Solution {

	public String solution(int[] numbers) {
		StringBuilder sb = new StringBuilder();

		//int[] -> String[]
		String[] strArr = new String[numbers.length];
		for(int i=0; i<numbers.length; i++) {
			strArr[i] = String.valueOf(numbers[i]);
		}//for end

		//정렬 방식 지정
		//두 문자열 붙였을 때 값을 비교해서 내림차순 정렬
		Arrays.sort(strArr, new Comparator<String>() {
			@Override
			public int compare(String str1, String str2) {
				String temp1 = str1+str2;
				String temp2 = str2+str1;
				return temp2.compareTo(temp1); //내림차순
				//temp1.compareTo(temp2); 오름차순
			}
		});

		if(strArr[0].equals("0")) {
			//모든 숫자가 0인 경우
			//"00000.."이 아닌 "0"으로 출력
			sb.append("0");
		} else {
			for(String string : strArr) {
				sb.append(string);
			}//for end
		}//if~else end

		return sb.toString();
	}
}

 

일반적인 String 내림차순 정렬에서는 "300" "3" 순으로 정렬되지만,

여기서는 "3" "300" 순으로 정렬되어야 한다.

따라서 새로운 기준으로 정렬하게 끔 comparator 작성해준다.

 

**

Comparator/Comparable 오름차순, 내림차순

String.valueOf(int) vs toString() 

 

댓글