알고리즘/프로그래머스
가장 큰 수
송민준
2021. 2. 13. 23:27
programmers.co.kr/learn/courses/30/lessons/42746
문제가 쉬운 것 같으면서도 조금 헷갈림
규칙을 찾아내서 정렬 후 합쳐서 리턴.
마지막 11번 케이스가 실패해서 뭔가 봤더니
[0, 0, 0, 0, 0]으로 들어온 경우임.
마지막에 리턴 시에 해당케이스 체크함.
/**
* 프로그래머스 lv2
* 가장 큰 수
* 1. 배열의 값을 string으로 변환 후
* 2. 비교하고자 하는 값이랑 더해서 숫자형으로 파싱하고 비교해서 정렬
* 3. 정렬된 것을 합침
* - 0으로만 들어온 경우가 있음.(return시 삼항)
*/
public class LargestNumber {
public String solution(int[] numbers) {
String result = Arrays.stream(numbers)
.mapToObj(String::valueOf)
.sorted((a, b) ->
Integer.parseInt(b + a) - Integer.parseInt(a + b))
.collect(Collectors.joining());
return (result.indexOf("0") == 0) ? "0":result;
}
}
정렬 규칙은 앞뒤 값을 각각 더해보고 둘 중에 큰 값이 앞에 오게 함
테스트 코드
import org.junit.Test;
import static org.junit.Assert.*;
public class LargestNumberTest {
@Test
public void solution() {
//given
int[] numbers = {6, 10, 2};
//when
LargestNumber ln = new LargestNumber();
String result = ln.solution(numbers);
//then
assertEquals("6210", result);
}
@Test
public void solution2() {
//given
int[] numbers = {3, 30, 34, 5, 9};
//when
LargestNumber ln = new LargestNumber();
String result = ln.solution(numbers);
//then
assertEquals("9534330", result);
}
@Test
public void solution3() {
//given
int[] numbers = {0, 0, 0, 0, 0};
//when
LargestNumber ln = new LargestNumber();
String result = ln.solution(numbers);
//then
assertEquals("0", result);
}
}