Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- 기자단
- 에이블스쿨 7기
- KT AIVLE School
- kt 에이블스쿨 7기
- springboot
- MSA
- kt 에이블스쿨 8기
- KT 에이블스쿨
- kt aivle school 7기
- 데이터분석
- 미니프로젝트
- 마이크로서비스
- kt에이블스쿨 8기
- 에이블스쿨 모집
- kt에이블스쿨8기
- kt aivleschool 8기
- AI트랙
- 어답터 민
- kt에이블스쿨7기
- 관세용어
- Kafka
- ktaivleschool
- kt aivleschool 7기
- msaez
- KT에이블스쿨
- 7일 전사
- 에이블 기자단
- 후기
- aice associate
- 데이터
Archives
- Today
- Total
Hseong
[프로그래머스 고득점 kit - 정렬] - 가장 큰 수 본문
728x90
반응형
import java.util.Arrays;
class Solution {
public String solution(int[] numbers) {
// Step 1: int 배열을 String 배열로 변환
String[] strNumbers = new String[numbers.length];
for (int i = 0; i < numbers.length; i++) {
strNumbers[i] = String.valueOf(numbers[i]);
}
// Step 2: 정렬 - (o2 + o1)이 (o1 + o2)보다 크면 o2가 앞에 오게 정렬
Arrays.sort(strNumbers, (o1, o2) -> (o2 + o1).compareTo(o1 + o2));
// Step 3: 정렬된 문자열을 하나로 합치기
StringBuilder sb = new StringBuilder();
for (String s : strNumbers) {
sb.append(s);
}
// Step 4: 0이 여러 개일 경우 (예: "000") => "0" 반환
if (sb.charAt(0) == '0') {
return "0";
}
return sb.toString();
}
}
- 해당 문제는 기본적으로 numbers라는 int 배열을 받으면 , 이 숫자들을 조합해서 가장 큰 수를 구해서 문자열로 최종 출력하는 것이다.
- 일단 int 배열의 원소들이므로 해당 배열의 크기만큼 strNumbers라는 배열을 선언하고, for문을 돌면서 String.valueOf(원소) 구문을 통해 int 를 문자로 변환한다.
- Arrays.sort(배열명) 만 사용하게되면 기본적으로 오름차순으로 정렬하지만, 이를 확장해서 사용하게된다면 위 코드처럼 사용할 수 있다
- Arrays.sort(배열, (o1, o2) -> (o2+o1).compareTo(o1+o2)) --> 이것은 o2+o1 "106" vs o1+o2 "610" 비교해서 만약 앞에 식이 크다면 o2가 작은 수이므로 o1보다 앞으로 가게되고, 반대의 경우는 이와 반대로 생각하면 된다.
- 그럼 step2 를 지났다면 가장 큰 수가 되는 방향으로 배열이 정렬이 되고, StringBuilder 를 이용하여 파이썬으로 치면 리스트처럼 사용한다.
- 그럼 여기서 왜 StringBuilder를 사용하냐면 String에서는 불변이라 + 연산을 이용하면 매번 새 String 객체를 새로 만들어야돼서 속도가 느려 시간복잡도 차원에서 생각하면 비효율적이다. 그래서 StringBuilder를 통해 문자열을 메모리 위에서 수정하고 필요할 때 마다 변경가능하여 빠르기 때문이다.
- 그래서 가장 큰 수가 되는 조합의 배열의 원소들을 for문을 통해 각각 append() 문을 통해서 붙이고, "000" 이렇게 0만 있는 경우 0만 출력하도록 if 문을 구현하여, 이상이 없다면 sb.toString()으로 문자열로 최종 return 하여 출력한다.
- 아니 그러면 StringBuilder 그대로 출력하면 안되나?? 할 수 있겠지만 객체의 일부라 보이는 것만 같고 , 아래와 같이 다르기 때문에 꼭 toString() 구문을 통해 변환해서 출력해야한다.
728x90
반응형
'Algorithm > Java' 카테고리의 다른 글
[프로그래머스 고득점 kit - 완전탐색] - 소수찾기 (1) | 2025.04.30 |
---|---|
[프로그래머스 고득점 kit - 완전탐색] - 모의고사 (0) | 2025.04.29 |
[프로그래머스 고득점 kit - 완전탐색] - 최소직사각형 (0) | 2025.04.29 |
[프로그래머스 고득점 kit - 정렬] - H-Index (0) | 2025.04.29 |
[프로그래머스 고득점 kit - 정렬] - K 번째수 (0) | 2025.04.29 |