일단 코드 써놓은건 존나 길어서 안봤음
이 문제의 핵심은 두 수의 우선순위를 어떻게 비교하냐,인데
길이가 같으면 단순히 숫자가 크면 우선순위가 크지만 길이가 다르면 비교하기가 힘듬
그럼 어떻게 해야되냐, 걍 길이를 같게 만들어주면 됨
정확히는 두 수를 서로 뒤에 붙여서 크기를 비교해주면됨
예를들어 12와 121을 비교하고싶으면
12 + 121 인 12121과 121+12인 12112를 비교하면 12를 앞에둔쪽이 더 숫자가 크니까
12를 우선하도록 하면 끝
아래는 내가 짠 소스
import java.util.Arrays; class Solution { public String solution(int[] numbers) { String[] arr = new String[numbers.length]; for(int i=0;i<numbers.length;++i) { arr[i] = String.valueOf(numbers[i]); } Arrays.sort(arr, (o1,o2)-> { if(o1.length()==o2.length()) return o2.compareTo(o1); return Integer.compare(Integer.parseInt(o2+o1),Integer.parseInt(o1+o2)); }); StringBuilder sb = new StringBuilder(); for(String str : arr) { sb.append(str); } for(int i=0;i<sb.length()-1;i++) { if(sb.charAt(i)!='0') break; sb.deleteCharAt(i); i--; } return sb.toString(); } }
9개의 댓글
무분별한 사용은 차단될 수 있습니다.
썰쟁이
내가 씨플플이라 자바는 잘모르겠는데 형말대로 두수 합쳐서 큰수되는걸 앞으로 하면되겟네 개꿀힌트 고마워 형
음 그럼 검사를 어케해줘야될까...
1. 포문두번돌려서 배열안에있는 모든원소와 비교해서 스왑
2. 자신과 자신바로뒷번호끼리만 비교해서 스왑후 배열 -1 (-1이 확실한건지는 잘모르겟음)
년째 수집중
1,2를 동시에 하는게 버블정렬인데
스왑조건에 저거 넣으면되지
어떤정렬 알고리즘을 쓰건 스왑조건만 저걸로하면됨
썰쟁이
버블정렬은 오름차순아니면 내림차순아니야?
return a + b > b + a;하는 함수하나만들어서 sort에 추가하려햇는데...
아리성애자
왜 있는 함수 안쓰려고해?
c++도 sort있잖아
compare(string a, string b) 함수 만들어놓고
sort(arr,compare) 이렇게 쓰면 될걸?
썰쟁이
내가말한 return a + b > b + a;이 compare함수말하는거였어
암튼 이거 만들어놓고
sort(arr.begin(),arr.end(),compare)하면
이중포문같은거안쓰고 바로 정렬이되는거야??
아리성애자
begin end 필요없고 sort(arr, compare)
나도 c++안써서 오버로드 어케되어있는진모르겠는데 그냥 arr,compare가 맞을걸
근데 이런거 푸는거 그냥 재미로하는거야? 아님 기업 코테 뚫을라고 하는거야?
썰쟁이
코테뚫으려공 ㅎㅎ
원래 c++하다가 유니티배우면서 유니티 포폴만들다가 다 엎어져서 면접넣고있는뎅
c++ 오래안봐서 코딩홈페이지에서 문제풀고있어
아리성애자
으 빡공해서 코테붙으렴
썰쟁이
ㅠㅠ고마워 잘못하지만 꼭 노력해서 붙어볼께
그리고 미안하지만 종종물어보러올께 ㅠㅠ