티스토리 뷰

문제보러가기

 

코딩테스트 연습 - 가장 큰 수

0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 ��

programmers.co.kr

이문제는 정렬을 잘 활용할 수 있는가를 묻는 간단한 문제였다(사실 나에겐 정말 간단하지는 않았다는...) 이문제는 예전에 풀어보고 코드를 정리하다가 못 풀고 넘어가서 다시 푼 문제이다. 그래도 실력이 쪼끔은 늘었는지 보고서 String으로 내림차순!이라고 생각을 했다는 ㅎ 하지만 그게 끝이 아니었다지....

 

문제풀이

-가장 큰 수를 만들려면 가장 큰 숫자가 앞에 와야 한다. 

-int형으로 큰 수가 아닌 String형으로 사전 순으로 큰 숫자가 앞으로 와야 한다 

(예 : 89, 9 int형으로 큰 수는 89 정렬 시 899라는 숫자가 나옴 | String의 경우 989라는 숫자가 나오고 더 큰 숫자가됨)

-처음에는 그냥 간단히 String으로 변환시킨 배열을 정렬을 시켰지만 문제가 생김 (3,30의 경우 303이 되어버림....)

-두 개의 숫자를 합친 것을 비교하면 가능하다는 것을 발견! Comparator <String>을 사용하여 정렬 후 숫자를 만듦

-여기서 놓치면 안 되는 게 000이라는 숫자가 나올 수 있기에 예외처리를 해줘야 함!

 


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

public class Solution{

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String answer = "";
		int[] numbers = {3,30,34,5,9};
		String[] strNum = new String[numbers.length];
        //숫자를 스트링 사전 내림차순으로 정렬하기위해 변환
		for(int i=0;i<numbers.length;i++) {
			strNum[i]=String.valueOf(numbers[i]);
		}
		
        
		Arrays.sort(strNum, new Comparator<String>() {

			@Override
			public int compare(String s1, String s2) {
            	//3,30으로 330 303을 구분하기 위해 String을 합쳐서 비교해줌
				return (s2+s1).compareTo(s1+s2);
			}
			
		});
		for(String i : strNum) {
			answer+=i;
		}
        //000이 0으로 나오게 하기위한 처리
		if(answer.charAt(0)=='0') {
			answer="0";
		}
		
		System.out.println(answer);
		
	}
	

}
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함