ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 가장 큰 수 (JAVA)
    프로그래머스 알고리즘 2023. 5. 2. 16:57
    728x90

    문제

     

    프로그래머스

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

    programmers.co.kr

    위와 같이 numbers가 주어지면 숫자를 맘대로 정렬해서 가장 큰 수를 만들면 된다.

    일단 생각한 방법이 

    1. 가장 왼쪽에 있는 숫자가 큰 수로 정렬하기

    출처 : https://chanhuiseok.github.io/posts/prog-2/     

    위와 같이 정렬 기준을 세우면 된다.

    먼저 그 전에 numbers로 들어오는 숫자를 String형으로 바꿔줄 필요가 있다.

    그래야 조작하기 쉽기도 하고, numbers의 길이가 1000이 넘기 때문에 Long 타입으로도 넣지 못한다.

    String[] nums = new String[numbers.length];
            String answer = "";
            boolean zero=true;
            for(int i=0;i<numbers.length;i++){
                nums[i] = String.valueOf(numbers[i]);
                if(numbers[i]!=0)zero=false;
            }

    nums라는 String 배열을 만들어 그곳에다가 넣어준다.

    int형에서 String으로 변환하는 것은 String.valueOf()를 해주면 된다.

    이제 정렬하는 것을 알아보자

    Arrays.sort(nums, new Comparator<String>(){
                @Override
                public int compare(String s1, String s2){
                    return (s2+s1).compareTo(s1+s2);
                }
            });

    원래 존재하던 Arrays.sort를 새롭게 Override해주었다.

    compareTo()는 인자로 들어온 객체와 비교한다.

    compareTo() 메서드의 반환 값은 다음과 같다.

    • 0: 두 객체가 같은 값을 가집니다.
    • 양수: 현재 객체가 매개변수로 전달된 객체보다 큰 값을 가집니다.
    • 음수: 현재 객체가 매개변수로 전달된 객체보다 작은 값을 가집니다.

    이제 정렬된 것은 anwer로 옯기면 된다.

    for(int i=0;i<nums.length;i++)answer+=nums[i];
            if(zero)answer="0";
            return answer;

    이 때 zero라는 것은 만약 numbers가 [0, 0, 0, 0]으로 들어오면 answer = 0000이 된다.

    답은 0인데...

    따라서 모든 input값이 0이면 zero = true가 된다.


    전체 코드이다.

    import java.util.*;
    class Solution {
        public String solution(int[] numbers) {
            String[] nums = new String[numbers.length];
            String answer = "";
            boolean zero=true;
            for(int i=0;i<numbers.length;i++){
                nums[i] = String.valueOf(numbers[i]);
                if(numbers[i]!=0)zero=false;
            }
            Arrays.sort(nums, new Comparator<String>(){
                @Override
                public int compare(String s1, String s2){
                    return (s2+s1).compareTo(s1+s2);
                }
            });
            for(int i=0;i<nums.length;i++)answer+=nums[i];
            if(zero)answer="0";
            return answer;
        }
    }

    '프로그래머스 알고리즘' 카테고리의 다른 글

    전화번호 목록 JAVA  (0) 2023.05.05
    게임 맵 최단거리 JAVA  (0) 2023.05.05
    정수 삼각형(JAVA)  (0) 2023.05.05
    체육복 (JAVA)  (0) 2023.05.05
    소추 찾기(JAVA)  (0) 2023.05.04
Designed by Tistory.