조급하면 모래성이 될뿐

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

Algorithm/Programmers

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

Pawer0223 2019. 11. 7. 17:11

문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/42746

 

코딩테스트 연습 - 가장 큰 수 | 프로그래머스

0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다. 0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.

programmers.co.kr

나의 풀이

처음에는.. 문제유형을보고 힌트를 얻었다..

정렬 이라고해서 Compare인터페이스를 구현해야겠다고 생각했다.

 

자릿수 별로 문자열을 비교해서 내림차순으로 정렬을 하도록 구현하였다.

 

가장 고민을 많이했던부분은, 같은 문자열이 동일하게 존재하는 경우이다.

 

ex) [ 34, 3435 ] 와 같은경우에는 343435가 더 큰수이다.

 

이때 비교 기준을 찾기위해.. 비교 한 글자는 지우고, 다음 글자부터 다시 비교하는 방식을 구현하려고 시도하였으나 잘 풀리지 않았다..

 

그러다 문득 비교대상이 두개이니깐 34 + 3435 붙이고, 3435 + 34 붙여서 비교하면 되겠다는 생각이 정말 문득났다..

 

그렇게 비교기준을 잡아서 compare메소드에 구현해 주었더니 정답처리 되었다.

 

나름 머리를 잘 썻다고 생각했는데.. 다른사람의 풀이가 대부분 비슷했다.. ( 오히려 더 깔끔했다.. )

코드

package Programmers.Level2;

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

public class MostBigNumber {

	public static void main(String[] args) {

		int[] numbers = { 3, 30, 34, 5, 9 };

		String answer = solution( numbers );

		System.out.println(answer);

	}//main
	public static String solution(int[] numbers) {
		String answer = "";

		String[] sS = new String[numbers.length];

		for ( int i = 0 ; i < sS.length; i++ ) {
			sS[i] = String.valueOf(numbers[i]);
		}

		Arrays.sort( sS , new Comparator<String>() {

			@Override
			public int compare(String o1,  String o2) {

				if ( o1.charAt(0) > o2.charAt(0) ) return -1;
				else if ( o1.charAt(0) < o2.charAt(0)) return 1 ;

				else if ( o1.charAt(0) == o2.charAt(0)) {
					return (o1+o2).compareTo(o2+o1) * (-1);
				}
				return 0 ;
			}
		});

		int sum = 0 ;
		for ( String s : sS ) {
			answer+=s;
			sum += Integer.valueOf(s);
		}
		if ( sum == 0 ) return "0";
		return answer;
	}
}//class

제출 결과

반응형

'Algorithm > Programmers' 카테고리의 다른 글

[프로그래머스]소수 찾기  (0) 2019.11.07
[프로그래머스] 위장  (0) 2019.11.07
[프로그래머스]조이스틱  (5) 2019.11.07
[프로그래머스]큰 수 만들기  (0) 2019.11.06
[프로그래머스] 기능개발  (0) 2019.11.05