본문 바로가기
일반 학습/코딩 테스트

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

by StelthPark 2022. 3. 17.

처리조건

풀이

입력값 : solution([6, 10, 2]);

 

우선 입력으로 들어온 numbers를 자세히 보자 6 ,10 ,2이며 sort로 정렬하여 앞 뒤를 문자열로 타입을 바꿔 서로 더해보고 더 높은 수가 나오는 순서를 정렬 시켜본다고 하자.

 

위 처럼 numbers.sort안에 인자로 함수를 넣어 각각 앞 뒤로 비교해서 string타입으로 합쳐주고 parseInt로 크기를 비교해 위치를 정렬하게된다. sort는 한차례 돌고나서 계속 몇 차례가 돌면서 더 이상 바꿀 자리가 없으면 종료되므로 numbers가 최종 정렬되고 join("")으로 합쳐주면 최종 숫자가 나오게된다.

 

문제를 풀고나니 11번에서 계속 오류가 났다. 한 두개정도가 오류가 나면 꼭 제한사항을 확인해보자. 제한사항 중에 numbers원소가 0이상이므로 0이 들어 갈 수있고 0 0 0 이 들어가면 마지막 join후 000이 리턴될 수 있다. 그래서 answer을 숫자로 바꿔 0이면 "0"를 리턴하도록 하였다.

 

function solution(numbers) {

  numbers.sort(sortfunc);
  let answer = numbers.join("");
  if (parseInt(answer)===0) return "0";
  else return answer;
}
function sortfunc(a, b) {
  if (parseInt(a.toString() + b.toString()) < parseInt(b.toString() + a.toString())) return 1;
  if (parseInt(a.toString() + b.toString()) > parseInt(b.toString() + a.toString())) return -1;
  if (parseInt(a.toString() + b.toString()) === parseInt(b.toString() + a.toString())) return 0;
}

 

 

댓글