문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/42746
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
int 배열이 주어지면 각 숫자를 적절하게 조합해 제일 큰 숫자를 만들면 됩니다.
문제에 대한 아이디어
주어진 int 배열을 적절한 조건에 맞게 정렬을 하면 될 것 같습니다.
- 문제는 2번 예시처럼 3, 30, 34를 어떻게 정렬할 것 인가 입니다.
- 둘 다 맨 앞자리는 똑같지만 뒤의 자리와 합한 숫자의 크기를 각각 비교해봐야 합니다!!
이렇게 비교하면 조건이 굉장히 많이 필요할 것 같습니다. 그래서 간단하게 생각해서 현재 숫자와 전 숫자를 올바른 순서로 합한 것과 반대의 순서로 합한 것의 크기를 비교햅 보는 것입니다.
예를 들어 3 ,30 이면 330과 303 2가지로 합할 수 있습니다. 330이 더 크므로 330으로 정렬을 해야 합니다.
전체 코드
import java.util.Arrays;
import java.util.stream.Collectors;
class Solution {
public String solution(int[] numbers) {
return Arrays.stream(numbers)
.mapToObj(String::valueOf) // int를 String으로 변경
.sorted((s1, s2) ->{
int original = Integer.parseInt(s1 + s2); // 원래 숫자
int reversed = Integer.parseInt(s2 + s1); // 반대로 정렬 숫자
return reversed - original; // 내림 차순으로 정렬
})
.collect(Collectors.joining("")) // 각각의 String을 하나로 합침
.replaceAll("^0+", "0"); // 앞자리가 0으로 시작하면 0으로 변경
}
}
'BackEnd > 알고리즘 공부' 카테고리의 다른 글
디펜스 게임 (프로그래머스) JAVA (0) | 2023.08.05 |
---|---|
연속 펄스 부분 수열의 합 (프로그래머) JAVA (0) | 2023.08.01 |
불량 사용자 (프로그래머스) JAVA (0) | 2023.07.28 |
쿼드압축 후 개수 세기(프로그래머스) JAVA (0) | 2023.07.27 |
코딩 테스트에서 문자열 관리 (JAVA) (0) | 2023.07.25 |