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

괜찮아요?·2023년 4월 5일
0

programmers

목록 보기
20/23

링크

코딩테스트 연습 > 정렬 > 가장 큰 수


풀이순서

  1. 숫자를 문자열로 만들어서 새로운 배열에 저장
  2. numbers의 개수만큼 돌면서, 앞뒤로 더한 string을 int로 바꿔 비교하면서 배열 정렬
  3. String으로 합치기

코드(실패)

import java.util.*;

class Solution {
    public String solution(int[] numbers) {
        String answer = "";
        String[] StringNum = new String[numbers.length];
        
        //int를 String으로 바꿔서 배열에 저장
        for(int i=0; i<numbers.length; i++){
            StringNum[i] = Integer.toString(numbers[i]);
        }
        //사전순 정렬
        Arrays.sort(StringNum,Comparator.reverseOrder());
        
        //앞뒤숫자 이어붙여서 비교
        for(int i=0; i<numbers.length-1; i++){
            int num1 = Integer.valueOf(StringNum[i]+StringNum[i+1]);
            int num2 = Integer.valueOf(StringNum[i+1]+StringNum[i]);
            if(num1 < num2){
                String tmp = StringNum[i];
                StringNum[i] = StringNum[i+1];
                StringNum[i+1] = tmp;
            }
        }
        System.out.println(Arrays.toString(StringNum));
        for(String num : StringNum){answer += num;}
        if(answer.charAt(0) == '0'){answer = "0";}
        return answer;
    }
}

참고

  • Comparator는 Java에서 제공하는 인터페이스 중 하나입니다.
  • 자바에서는 인터페이스를 통해 다형성을 구현하는 경우가 많습니다. 이 때, 인터페이스에 선언된 메서드를 구현하는 것이 필요합니다. Comparator 인터페이스는 두 객체를 비교하는 compare 메서드를 구현해야 합니다.
  • 따라서 Comparator 인터페이스를 구현할 때, 인터페이스에 선언된 메서드를 반드시 구현해야 합니다. 이때, @Override 어노테이션을 붙이면 해당 메서드가 오버라이딩한 메서드임을 알려주므로, 실수를 방지할 수 있습니다.

코드(성공)

import java.util.*;

class Solution {
    public String solution(int[] numbers) {
        String answer = "";
        String[] StringNum = new String[numbers.length];
        
        //int를 String으로 바꿔서 배열에 저장
        for(int i=0; i<numbers.length; i++){
            StringNum[i] = Integer.toString(numbers[i]);
        }
        //사전순 정렬
        Arrays.sort(StringNum,Comparator.reverseOrder());
        
        // Comparator 구현
        Arrays.sort(StringNum, new Comparator<String>() {
            @Override
            public int compare(String s1, String s2) {
                // s1 + s2와 s2 + s1을 비교하여 더 큰 값을 반환
                return (s2 + s1).compareTo(s1 + s2);
            }
        });       
        
        for(String num : StringNum){answer += num;}
        if(answer.charAt(0) == '0'){answer = "0";}
        return answer;
    }
}
profile
할 수 있어요

0개의 댓글