IT could be
미완,, 프로그래머스 - 가장 큰 수 [JAVA] 본문
언어는 자바 !
# Issue
package org.example.sort;
import java.util.ArrayList;
import java.util.List;
public class MakeMaxNum {
public String solution(int[] numbers) {
String answer = "";
List<String> list = new ArrayList<>();
for (int i = 0; i < numbers.length; i++) {
list.add(Integer.toString(numbers[i]));
}
for (int i = 0; i < list.size()-1; i++) {
for (int j = i + 1; j < list.size(); j++) {
String one = list.get(i);
String two = list.get(j);
int idx = Math.min(one.length(), two.length());
for (int k = 0; k < idx; k++) {
if ((int)one.charAt(k) < (int)two.charAt(k)) {
list.remove(i);
list.add(i, two);
list.remove(j);
list.add(j, one);
}
}
}
}
for (int i = 0; i < list.size(); i++) {
answer += list.get(i);
}
return answer;
}
public static void main(String[] args) {
MakeMaxNum makeMaxNum = new MakeMaxNum();
int[] arr = {3, 30, 34, 5, 9};
System.out.println(makeMaxNum.solution(arr)); // 9534330
}
}
다른 생각이 너무 안나서 공부하려고 ,, 다른 코드들을 참고해봤다
수를 순서대로 더해가면서 더 큰 경우로 sort하는 풀이방법을 확인했다.
그래서 원래있던 코드에다가 수정을 해봤다.
# Issue
package org.example.sort;
public class MakeMaxNum {
public String solution(int[] numbers) {
String answer = "";
String[] list = new String[numbers.length];
String one;
String two;
for (int i = 0; i < list.length - 1; i++) {
for (int j = i + 1; j < list.length; j++) {
one = Integer.toString(numbers[i]);
two = Integer.toString(numbers[j]);
int tmp;
if (Integer.parseInt(one + two) < Integer.parseInt(two + one)) {
tmp = numbers[i];
numbers[i] = numbers[j];
numbers[j] = tmp;
}
}
}
if (numbers[0] == 0) {
return "0";
}
for (int i = 0; i < numbers.length; i++) {
answer += Integer.toString(numbers[i]);
}
return answer;
}
public static void main(String[] args) {
MakeMaxNum makeMaxNum = new MakeMaxNum();
int[] arr = {3, 30, 34, 5, 9};
System.out.println(makeMaxNum.solution(arr)); // 9534330
}
}
String으로 바꾼 numbers에 있는 비교하는 두 값을
순서를 달리해서 더 큰 수가 되도록 정렬을 하는 방법인데
예를 들어서 "5" 와 "9"가 있을 때
"59" 와 "95" 를 비교해서 "95"가 더 크니까 자리가 바뀌도록 하는 로직이다.
그리고 추가로 "000" 같은 경우는 "0" 이니까
이 예외처리 코드도 추가해 주었다,
하지만,, ,,여전히 시간 초과가 난다..
# Issue
package org.example.sort;
public class MakeMaxNum {
public String solution(int[] numbers) {
String answer = "";
String[] list = new String[numbers.length];
for (int i = 0; i < numbers.length; i++) {
list[i] = Integer.toString(numbers[i]);
}
for (int i = 0; i < list.length - 1; i++) {
for (int j = i + 1; j < list.length; j++) {
String tmp;
if ((list[i]+list[j]).compareTo(list[j]+list[i]) < 0) {
tmp = list[i];
list[i] = list[j];
list[j] = tmp;
}
}
}
if (list[0].compareTo("0") == 0) {
return "0";
}
for (int i = 0; i < numbers.length; i++) {
answer += list[i];
}
return answer;
}
public static void main(String[] args) {
MakeMaxNum makeMaxNum = new MakeMaxNum();
int[] arr = {3, 30, 34, 5, 9};
System.out.println(makeMaxNum.solution(arr)); // 9534330
}
}
숫자 비교와 문자열 비교에 사용되는
compareTo() 를 사용해봤다
숫자의 경우
크다 (1)
같다 (0)
작다 (-1)
문자열의 경우
같다 (0)
문자열 차이 ( 음수에서 ~ 양수까지 )
.. 흠
하지만 계속해서 시간초과가 나는데,, ,,
Comming Soon,,
계속 풀고 있는 즁임 ,,
'알고리즘' 카테고리의 다른 글
프로그래머스 - 최소직사각형 [JAVA] (0) | 2023.03.09 |
---|---|
✔ 프로그래머스 - 모의고사 [JAVA] (0) | 2022.12.26 |
프로그래머스 - 제일 작은 수 제거하기 [JAVA] (0) | 2022.12.14 |
프로그래머스 - 예산 [JAVA] (0) | 2022.12.13 |
프로그래머스 - 큰 수 만들기 [JAVA] (0) | 2022.12.12 |
Comments