Algorithm/Programmers

[프로그래머스] 가장 큰 수

1일1코딩 2020. 8. 23. 23:02

https://programmers.co.kr/learn/courses/30/lessons/42746

 

코딩테스트 연습 - 가장 큰 수

0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 ��

programmers.co.kr

풀이과정

처음에 모든 경우의 수를 다 찾아서 정답을 구했으나, 시간 초과 발생했다. 문제에 주어진 제한 사항을 읽어보게 되면

numbers의 최대 길이는 100,000이 된다....

 

여러 방법 중 오름차순(가장 앞에 올 우선순위 순으로)으로 정렬을 한 후 모두 이어 붙이면 되겠다고 생각했다.

 

[1, 115] 가 있을 경우 1151과 1115를 비교하여 1115 - 1151 > 0 조건 을 사용하여 0보다 작을 경우 뒤에 문자가 더 우선순위가 높아 순서를 바꿔주면 된다.

 

마지막에 join을 이용하여 배열을 문자열로 변환하였다.

 

'00' 이 나올 경우 '0'으로 처리하였다.

 

 

 

소스코드

더보기
function solution(numbers) {
	var answer = numbers.sort(function(a, b) {
		a = a.toString();
		b = b.toString();
		return (a + b) - (b + a) > 0 ? -1 : 1;
	}).join('');
	return answer[0] == 0 ? '0' : answer;
}