99클럽 코테 스터디 11일차 TIL / [프로그래머스] 가장 큰 수

전종원·2024년 8월 1일
0
post-custom-banner

오늘의 학습 키워드


정렬

문제


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

  • 플랫폼: 프로그래머스
  • 문제명: 가장 큰 수
  • 난이도: Lv2

풀이


import java.util.*;

class Solution {
    public String solution(int[] numbers) {
        String[] strs = Arrays.stream(numbers).mapToObj(String::valueOf).toArray(String[]::new);
        
        Arrays.sort(strs, (o1, o2) -> {
            int o1o2 = Integer.parseInt(o1 + o2);
            int o2o1 = Integer.parseInt(o2 + o1);
            
            return o2o1-o1o2;
        });
        
        
        StringBuilder sb = new StringBuilder();
        
        for(int i=0; i<strs.length; i++) {
            sb.append(strs[i]);
        }
        
        String answer = sb.toString();
	      
	      // 000 같은 경우 예외처리
        if(answer.charAt(0) == '0') {
            return "0";
        }
        
        return answer;
    }
}

접근

  • 처음에는 단순히 String 내림차순 정렬을 통해 문제 해결할 수 있지 않을까? 라고 생각했습니다.
    • 그러나 {“3”, “30”} 의 경우 {”30”, “3”}으로 정렬되어 가장 큰 수가 될 수 없었습니다.
  • 그래서 정렬 조건을 문제에 맞게 직접 정의하여 문제를 해결했습니다.
  • 마지막 예외처리의 경우에는 0으로 이루어진 입력이 들어오면 “0000…” 과 같은 형태로 정답이 구성되기에 이를 “0”으로 바꿔주는 if문 하나를 두어 처리했습니다.

소요 시간

30분

회고


최초에 int 배열을 String 배열로 치환할 때 for문을 통해 직접 구현하지 않고, stream을 써서 간결하게 표현해봤습니다. 확실히 가독성이 좋은 것 같네요!

post-custom-banner

0개의 댓글