프로그래머스 가장 큰 수 자바

2023. 5. 13. 19:52코딩테스트/프로그래머스

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

이 문제는 int의 배열로 입력 받고 이어 붙여서 가장 큰 수를 String으로 반환해야 하는 문제다.

 

1. 입력 받은 int 배열을 String 배열로 변환해준다.

2. Arrays.sort를 활용하여 내림차순으로 정렬해준다.

3. 정렬된 배열을 String으로 붙여준다.

 

여기서 주의해야 할점은

1. Arrays.sort를 내림차순을 할 때

o1.compareto(o2) 이런식으로 하면 안되고 (o2 + o1).compareto(o2 + o1)으로 해줘야 된다는 것이다.

 

2. 입력받은 int의 배열이 0으로만 2개 이상 구성되어 있는경우 

예를 들어 {0, 0}으로 입력받았다면 String으로 이어붙힌다면 00으로 나오므로 0으로 나오게 해야하기 때문에 조건문으로 처리를 해줘야 한다.

 

문자열을 이어붙힐 때는 + 연산보다는 StringBuilder를 사용해주도록 하자

 

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

public class Solution42746 {

    public String solution(int[] numbers) {

        int size = numbers.length;
        String[] sNumbers = new String[size];

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

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

        // 예를 들어 0, 0 이런식으로 나오면 00이렇게 나오는 것을 방지하기 위해
        if (sNumbers[0].equals("0")) return "0";

        StringBuilder answer = new StringBuilder();

        for (int i = 0; i < size; i++) {
            answer.append(sNumbers[i]);
        }

        return answer.toString();
    }

    public static void main(String[] args) {
        int[] numbers = {6, 10, 2};

        Solution42746 solution42746 = new Solution42746();
        String result = solution42746.solution(numbers);
        System.out.println(result);
    }
}