-
가장 큰 수 (JAVA)프로그래머스 알고리즘 2023. 5. 2. 16:57728x90
위와 같이 numbers가 주어지면 숫자를 맘대로 정렬해서 가장 큰 수를 만들면 된다.
일단 생각한 방법이
1. 가장 왼쪽에 있는 숫자가 큰 수로 정렬하기
출처 : https://chanhuiseok.github.io/posts/prog-2/
위와 같이 정렬 기준을 세우면 된다.
먼저 그 전에 numbers로 들어오는 숫자를 String형으로 바꿔줄 필요가 있다.
그래야 조작하기 쉽기도 하고, numbers의 길이가 1000이 넘기 때문에 Long 타입으로도 넣지 못한다.
String[] nums = new String[numbers.length]; String answer = ""; boolean zero=true; for(int i=0;i<numbers.length;i++){ nums[i] = String.valueOf(numbers[i]); if(numbers[i]!=0)zero=false; }
nums라는 String 배열을 만들어 그곳에다가 넣어준다.
int형에서 String으로 변환하는 것은 String.valueOf()를 해주면 된다.
이제 정렬하는 것을 알아보자
Arrays.sort(nums, new Comparator<String>(){ @Override public int compare(String s1, String s2){ return (s2+s1).compareTo(s1+s2); } });
원래 존재하던 Arrays.sort를 새롭게 Override해주었다.
compareTo()는 인자로 들어온 객체와 비교한다.
compareTo() 메서드의 반환 값은 다음과 같다.
- 0: 두 객체가 같은 값을 가집니다.
- 양수: 현재 객체가 매개변수로 전달된 객체보다 큰 값을 가집니다.
- 음수: 현재 객체가 매개변수로 전달된 객체보다 작은 값을 가집니다.
이제 정렬된 것은 anwer로 옯기면 된다.
for(int i=0;i<nums.length;i++)answer+=nums[i]; if(zero)answer="0"; return answer;
이 때 zero라는 것은 만약 numbers가 [0, 0, 0, 0]으로 들어오면 answer = 0000이 된다.
답은 0인데...
따라서 모든 input값이 0이면 zero = true가 된다.
전체 코드이다.
import java.util.*; class Solution { public String solution(int[] numbers) { String[] nums = new String[numbers.length]; String answer = ""; boolean zero=true; for(int i=0;i<numbers.length;i++){ nums[i] = String.valueOf(numbers[i]); if(numbers[i]!=0)zero=false; } Arrays.sort(nums, new Comparator<String>(){ @Override public int compare(String s1, String s2){ return (s2+s1).compareTo(s1+s2); } }); for(int i=0;i<nums.length;i++)answer+=nums[i]; if(zero)answer="0"; return answer; } }
'프로그래머스 알고리즘' 카테고리의 다른 글
전화번호 목록 JAVA (0) 2023.05.05 게임 맵 최단거리 JAVA (0) 2023.05.05 정수 삼각형(JAVA) (0) 2023.05.05 체육복 (JAVA) (0) 2023.05.05 소추 찾기(JAVA) (0) 2023.05.04