[프로그래머스/Lv. 2] 가장 큰 수 (JAVA)
🔺 문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
🔺 코드
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
|
import java.util.*;
class Solution {
public String solution(int[] numbers) {
// int형 배열을 String형 배열로 바꾸기
String[] str = new String[numbers.length];
for(int i = 0 ; i < numbers.length ; i++) {
str[i] = Integer.toString(numbers[i]);
}
// 🔔 내림차순 정렬
Arrays.sort(str, new Comparator<String>() {
@Override
public int compare(String a, String b) {
return (b+a).compareTo(a+b); // 오름차순 정렬 : (a+b).compareTo(a+b);
}
});
// 첫 번쨰 값이 0인 경우, 0 리턴
if(str[0].equals("0")) return "0";
StringBuilder sb = new StringBuilder();
for(String s : str) {
sb.append(s);
}
return sb.toString();
}
}
|
cs |
🧩 해결 아이디어
• 정렬
1. int형 배열을 String형 배열로 변환한다.
2. String형 배열을 내림차순으로 정렬한다. (비교하는 대상인 숫자 2개를 앞뒤로 번갈아가며 이어붙여서 비교)
Arrays.sort(str, new Comparator<String>() {
@Override
public int compare(String a, String b) {
return (b + a).compareTo(a + b);
// 오름차순 정렬 : return (a + b).compareTo(a + b);
}
});
3. 첫 번쨰 값이 0인 경우는 [0,0,0,... , 0]인 경우밖에 없으므로, 0을 리턴한다.
그게 아니라면, 결과로 출력한다.
🔺 다른 풀이들
- 배열 정렬을 람다식으로 하셨다.
[프로그래머스] 가장 큰 수 - Java
코딩테스트 연습 - 가장 큰 수 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를
bellog.tistory.com
Arrays.sort(str, (o1, o2) -> (o2 + o1).compareTo(o1 + o2));
- 복습용으로 아주 굿...
[프로그래머스 / Level2] 가장 큰 수 (Java)
문제 https://programmers.co.kr/learn/courses/30/lessons/42746 코딩테스트 연습 - 가장 큰 수 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진
bada744.tistory.com
💬 느낀 점
배열 정렬.... 자주 안 쓰면 진짜 주기적으로 까먹는 것 같다.
이번 문제를 풀면서 Comparable Comparator 차이도 좀 알게 되었고...
담엔 꼭 기억하자,,, Comparator - compare() !!
1회독 | 2회독 | 3회독 | 4회독 | 5회독 |
V |
(참고)
✔ 자바 배열 정렬 (Comparator vs Comparable)
[java] 자바 배열 / 객체 정렬 (comparable, comparator도 같이 알아보자)
배열에 값을 넣는 방법은 알겠는데 프로그래밍을 하다 보면 배열의 정렬이 때때로 필요로 합니다. 또한 타입이 객체 타입인 경우에도 원하는 기준대로 정렬을 할 수 있도록 알아보도록 하겠습
junlab.tistory.com
✔ 풀이 참고
[프로그래머스 Lv.2] 가장 큰 수 java
문제설명 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중
ivory-room.tistory.com