[Java Algorithm] 프로그래머스 Lv.2 _ 가장 큰 수

2025. 7. 30. 13:02·Algorithm Study

[문제]

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

제한 사항
- numbers의 길이는 1 이상 100,000 이하입니다.
- numbers의 원소는 0 이상 1,000 이하입니다.
- 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.

 

[Algorithm]

1. numbers 배열의 원소들을 문자열로 변환

2. 원소를 차례대로 2개씩 붙인 수를 비교해서 다시 정렬 → 람다식 + compareTo 함수 사용

3. 예외 처리 (전부 0인 경우)

4. 결과 문자열로 반환

 

[Code]

import java.util.*;

class Solution {
    public String solution(int[] numbers) {
        String[] strNumbers = new String[numbers.length];
        for (int i = 0; i < numbers.length; i++) {
            strNumbers[i] = String.valueOf(numbers[i]);
        }
        
        Arrays.sort(strNumbers, (a, b) -> (b + a).compareTo(a + b));
        
        if (strNumbers[0].equals("0")) {
            return "0";
        }
        
        StringBuilder answer = new StringBuilder();
        for (String str : strNumbers) {
            answer.append(str);
        }
        
        return answer.toString();
        
    }
}

 

 

[+ 다른 사람 풀이]

import java.util.*;

class Solution {
    public String solution(int[] numbers) {
        String answer = "";

        List<Integer> list = new ArrayList<>();
        for(int i = 0; i < numbers.length; i++) {
            list.add(numbers[i]);
        }
        
        Collections.sort(list, (a, b) -> {
            String as = String.valueOf(a), bs = String.valueOf(b);
            return -Integer.compare(Integer.parseInt(as + bs), Integer.parseInt(bs + as));
        });
        
        StringBuilder sb = new StringBuilder();
        for(Integer i : list) {
            sb.append(i);
        }
        
        answer = sb.toString();
        if(answer.charAt(0) == '0') {
            return "0";
        } else {
            return answer;
        }
    }
}

 

Array 배열이 아닌 list로 문제를 푼 방식

List는 Collections.sort() 메서드를 통해 소팅을 할 수 있기 때문에 Collections.sort()사용한 것이 포인트

그리고 answer.chatAt(0) == '0' 조건으로 배열의 원소가 다 0인 경우를 걸러내 0을 return 해주는 예외 처리

두가지를 포인트로 공부하면 좋을 듯!

 

 

[+ Plus]

더보기

💡Arrays 클래스의 sort() 메서드

→ 배열을 정렬하는 메서드

커스텀 정렬 방식 사용 가능 

Arrays.sort(배열, Comparator);

 

💡Collections 클래스의 sort() 메서드

→ 리스트를 정렬하는 메서드

 

저작자표시 변경금지 (새창열림)

'Algorithm Study' 카테고리의 다른 글

[Java Algorithm] 프로그래머스 Lv.1 _ 최소직사각형  (2) 2025.07.30
[Java Algorithm] 프로그래머스 Lv.2 _ H-Index  (2) 2025.07.30
[Java Algorithm] 프로그래머스 Lv.1 _ K번째수  (2) 2025.07.29
[Java Algorithm] 프로그래머스 Lv.3 _ 베스트앨범  (1) 2025.07.28
[Java Algorithm] 프로그래머스 Lv.2 _ 의상  (3) 2025.07.28
'Algorithm Study' 카테고리의 다른 글
  • [Java Algorithm] 프로그래머스 Lv.1 _ 최소직사각형
  • [Java Algorithm] 프로그래머스 Lv.2 _ H-Index
  • [Java Algorithm] 프로그래머스 Lv.1 _ K번째수
  • [Java Algorithm] 프로그래머스 Lv.3 _ 베스트앨범
microsaurs
microsaurs
개발 스터디로그입니다. 공부한 내용을 정리해서 올립니다 ㅇ-ㅇ
  • microsaurs
    microsaurs.devlog
    microsaurs
  • 전체
    오늘
    어제
    • 분류 전체보기 (157)
      • Side Project (4)
      • Algorithm Study (53)
      • JAVA (8)
      • Swift (11)
      • Python (21)
      • CS (5)
      • React (3)
      • 리얼클래스 studylog (27)
      • 정보처리기사[실기] (23)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    study
    정처기실기
    정보처리기사프로그래밍언어
    타일러영어
    정보처리기사
    파이썬문법
    리얼학습일기
    영어회화
    Algorithm
    파이썬
    ios프로그래밍
    스위프트기초
    The Office
    Python
    프로그래밍언어
    Java
    더오피스
    나도코딩
    리얼클래스
    SWIFT
    알고리즘
    파이썬기초
    ios개발
    ios프로그래밍을위한스위프트기초
    자바알고리즘
    javaStudy
    javaalgorithm
    프로그래머스
    영어독학
    정보처리기사실기
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
microsaurs
[Java Algorithm] 프로그래머스 Lv.2 _ 가장 큰 수
상단으로

티스토리툴바