참고 : 너무 복잡하게 생각하지말자(두수가 자리수가 다르면 그냥 뒤에 붙이면 된다.최적화 할꺼면 다른쪽 1개씩만 추가하고 비교해도 될듯)
링크 : https://school.programmers.co.kr/learn/courses/30/lessons/42746
import java.util.*;
public class Solution {
public String solution(int[] numbers) {
String answer = "";
//초기값 세팅
List<Integer> lists = new ArrayList<>();
for (int number : numbers) {
lists.add(number);
}
//정렬
Collections.sort(lists, new SortByRoll());
//앞부분 0 제거
Iterator<Integer> iterator = lists.iterator();
while (iterator.hasNext()){
Integer next = iterator.next();
if(next == 0) iterator.remove();
else break;
}
//숫자 문자 치환
StringBuffer sb = new StringBuffer();
for (Integer list : lists) {
sb.append(list);
}
//답 출력, 문자 없을시 대체
answer = sb.length() > 0 ? sb.toString() : "0";
return answer;
}
//앞문자 비교
public class SortByRoll implements Comparator<Integer>{
public int compare(Integer f, Integer s){
Integer fNum = getNum(f);
Integer sNum = getNum(s);
return sNum - fNum == 0 ? compNums(f, s) : sNum - fNum;
}
}
//앞문자 같을시 서로 뒤에 추가후 크기 비교.
private Integer compNums(Integer first, Integer second){
StringBuffer fsb = new StringBuffer(String.valueOf(first));
StringBuffer ssb = new StringBuffer(String.valueOf(second));
String fs = new StringBuffer(fsb).append(ssb).toString();
String ss = new StringBuffer(ssb).append(fsb).toString();
Integer fI = Integer.valueOf(fs);
Integer sI = Integer.valueOf(ss);
return sI - fI;
}
//앞 숫자 추출
private Integer getNum(Integer value) {
String sString = String.valueOf(value);
return Integer.valueOf(sString.charAt(0));
}
}
'교육 > 코테' 카테고리의 다른 글
[프로그래머스]JAVA 소수찾기 -완전 탐색 (0) | 2022.07.07 |
---|---|
[프로그래머스]JAVA H-Index -정렬 (0) | 2022.07.07 |
[프로그래머스]JAVA 이중우선순위큐 -힙 (0) | 2022.07.07 |
[프로그래머스]JAVA 디스크 컨트롤러 -힙 (0) | 2022.07.07 |
[프로그래머스]JAVA 주식가격 -스택/큐 (1) | 2022.07.06 |