본문 바로가기
알고리즘 문제/프로그래머스

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

by 건복치 2021. 6. 11.
반응형

문제

https://programmers.co.kr/learn/courses/30/lessons/42746

 

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

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

programmers.co.kr

설명

처음에 순열을 구해서 모든 수를 구한 뒤에 최대 값을 구하면 되지 않을까라고 생각했다.

하지만 순열은 모든 수의 조합을 구하다보니 너무 커서 그런가 런타임 에러가 났다...ㅠㅠ

구글에 검색한 결과 역시 문제의 분류가 정렬이다보니 정렬로 풀면 쉽게 끝나는 문제였다..!

 

하지만 일반 정렬이 아니라 각 숫자들을 합친 문자열로 비교를 해야 한다.

3과 30이 주어진 경우 330이 큰지 303이 큰지를 비교해서 정렬해야 한다.

Comparator를 재정의해 두 숫자를 합친 값을 비교해 정렬하면 된다.

 

0, 0, 0, 0과 같이 0이 나오는 케이스의 경우 예외처리를 해줘야 한다.

0000이 아닌 0으로 출력할 수 있도록

전체 코드

import java.util.*;

class Solution {
    public String solution(int[] numbers) {
        String[] num = new String[numbers.length];
		for(int i = 0; i < numbers.length; i++) {
			num[i] = String.valueOf(numbers[i]);
		}

		Arrays.sort(num, new Comparator<String>() {
			@Override
			public int compare(String o1, String o2) {
				return (o2 + o1).compareTo(o1 + o2);
			}
		});

		String answer = "";
		for(int i = 0; i < num.length; i++) {
			answer += num[i];
		}
        
        if(answer.charAt(0) == '0') { // 0000 같은 경우 예외 처리 
			return "0";
		}

		return answer;
    }
}

GITHUB

https://github.com/KwonMinha/Programmers/blob/master/Level2/src/MaximumNumber.java

 

KwonMinha/Programmers

Programmers Algoritm. Contribute to KwonMinha/Programmers development by creating an account on GitHub.

github.com

 

반응형

댓글