하루에 한 문제

[프로그래머스] 가장 큰 수 -Java 본문

알고리즘/프로그래머스

[프로그래머스] 가장 큰 수 -Java

dkwjdi 2020. 12. 16. 14:54

https://programmers.co.kr/learn/courses/30/lessons/42746?language=java

 

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

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

programmers.co.kr

import java.util.PriorityQueue;
class Solution {
	    public String solution(int[] numbers) {
	        String answer = "";
	        PriorityQueue<String > pq = new PriorityQueue<>((o1,o2) -> ((o2+o1).compareTo(o1+o2)));
	        
	        int size=numbers.length;
	        int zeroCnt=0;
	        for(int i=0; i<numbers.length; i++) {
	        	pq.add(Integer.toString(numbers[i]));
	        	if(numbers[i]==0) zeroCnt++;
	        }
	        
	        if(zeroCnt==size) return "0";
	        
	        size=pq.size();
	        for(int i=0; i<size; i++ )
	        	answer+=pq.poll();
	        
	        return answer;
	    }
	}

 

소요시간 : 25분

 

우선 정렬을 어떤 식으로 할지 고민을 많이 했습니다. 

 

만약 입력이 30, 3 이라면 303, 330 중 330이 나와야 합니다!

 

처음에는 정렬을  new PriorityQueue<>((o1,o2) -> ((o2).compareTo(o1))); 로 해서 303이라는 값이 나왔습니다

 

위의 사항을 해결하기 위해  new PriorityQueue<>((o1,o2) -> ((o2+o1).compareTo(o1+o2))); 즉 두 개를 더해서 더 큰 것을 반환하는 pq로 바꾸었습니다!

 

그리고 이런 식으로 넣은 pq를 answer에 더해주기만 하면 답이 나옵니다!

아 그리고 이렇게 해서 바로 제출했더니 가장 마지막 테케가 실패라고 떠서 예외사항을 생각해 보니

numbers의 모든 값이 0일 때를 처리 안 해주어서 이 부분을 처리하고 제출했습니다!

Comments