Notice
Recent Posts
Recent Comments
송민준의 개발노트
가장 큰 수 본문
programmers.co.kr/learn/courses/30/lessons/42746
코딩테스트 연습 - 가장 큰 수
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰
programmers.co.kr
문제가 쉬운 것 같으면서도 조금 헷갈림
규칙을 찾아내서 정렬 후 합쳐서 리턴.
마지막 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);
}
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 로또의 최고 순위와 최저 순위 (0) | 2021.11.02 |
---|---|
프로그래머스 조이스틱 (0) | 2021.02.15 |
프로그래머스 HIndex (0) | 2021.02.07 |
프로그래머스 큰 수 만들기 (0) | 2021.02.04 |
프로그래머스 다리를 지나는 트럭 (0) | 2021.02.03 |