목표
- 가장 큰 수 문제 풀이
- 문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/42746
문제 요구사항
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
문제 풀이
정수를 이여 붙여 만들수 있는 가장 큰수 찾기
-
데이터 추상화
받은 정수를 이어 붙이기 위한 변수 하나만 생각하자. -
정렬하기.
모든 경우를 다하는 방법으로 js에서 제공하는sort
함수를 사용하여 구현해 보자. 각 문자들을 두 개씩 역으로 합쳐 크기를 비교해보자. 가령 [6, 10, 2]인 경우 첫째 둘째 값이 6, 10을 뽑고 역으로 합쳐 크기를 비교하자. 610 > 106 이므로 순서를 바꾸지 않는다. 다음으로 둘째 셋째 값인 10, 2를 뽑고 동일하게 진행하자. 102 > 210 이므로 순서를 바꾼다. [6, 2, 10] 다시 앞의 두개를 선택하고 동일하게 진행하자. [ 6, 2 ] 62 > 26 이므로 순서를 바꾸지 않는다. 이에따라 결과값은 [ 6, 2, 10] 이 된다. -
데이터 형변환.
위와같이 정렬을 하기 위해서 적절한 형변환이 필요하다.
const answer = numbers.sort((a, b) => Number([b,a].join('')) - Number([a,b].join(''))).join(''); return answer[0] === "0" ? "0" : answer
결론
- 마지막 테스트 케이스에서 넘어가지 못했다. 반례를 찾지 못했는데. 동작성을 확인하며 반례를 찾을줄 알아야한다.
- 문자를 숫자로 형변환하는 방법중 배열의 내장 메소드인
join
을 이용했지만,${a}${b}
로 진행하면 더 깔끔했을듯 한다.