개발공부/코딩테스트 연습문제
[프로그래머스] Level.2 가장 큰 수 (JAVA)
ku-na
2022. 2. 8. 10:38
문제 설명과 제한사항

풀이
import java.util.*;
class Solution {
public String solution(int[] numbers) {
String answer = "";
List<String> nums = new ArrayList<String>();
String num1, num2;
for(int num : numbers){
nums.add(Integer.toString(num));
}
Collections.sort(nums,Collections.reverseOrder());
for(int i = nums.size()-1; i > 0; i--){
num1 = nums.get(i);
num2 = nums.get(i-1);
if(num2.startsWith(num1) && num2.length() > num1.length()){
int n1 = Integer.parseInt(num1);
int n2 = Integer.parseInt(num2.substring(1,num1.length()+1));
if(n1 > n2) {
nums.set(i,num2);
nums.set(i - 1, num1);
}
}
}
for(int i = 0; i < nums.size(); i++){
answer += nums.get(i);
}
if(answer.startsWith("0")) return "0";
return answer;
}
}
++

결과는 다음과 같다..
내 풀이는 문자열 List 로 변경해서 내림차순으로 sort
그러면 6, 10, 2 는 6, 2, 10
3, 34, 30, 5, 9 는 9, 5, 34, 30, 3 으로 정렬된다
이 상태에서 첫번째 예시는 바로 만들 수 있지만 두번째 예시는
9 5 34 30 3 보다 9 5 34 3 30이 더 크기 때문에
순서를 바꿔줘야 한다고 생각했다.
때문에 마지막 순서부터 num1(3), num2(30)
1. num2가 num1으로 시작하면
2. num2의 길이가 num1보다 길다면 (중복값)
3. num2의 1번째 30 에서 0 부터 num1길이만큼 자른다.
4. 두 값을 비교해서 num1이 더 크면 자리를 바꾼다.
는 식으로 접근했지만 실패..
++
다른 사람들의 풀이를 검색해보니 compareTo를 통해 간단하게 풀었다.
풀이의 내용을 보면 num1 과 num2를 비교했을때 num2의 o1 + o2 (30) 보다 o2 + o1 (03)이 더크면 바꾸는 식 이었던걸로 기억한다. 조금 더 풀어보고, 무리가 있다고 생각되면 compareTo를 공부해서 다시 풀어볼 예정이다.