import java.util.ArrayList;
import java.util.List;
import java.util.Arrays;
class Solution {
public int[] solution(int[] array, int[][] commands) {
List<Integer> ans = new ArrayList<>();
for(int[] com : commands) {
int[] arr = Arrays.copyOfRange(array, com[0]-1, com[1]);
Arrays.sort(arr);
ans.add(arr[com[2]-1]);
}
return ans.stream().mapToInt(Integer::intValue).toArray();
}
}
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
class Solution {
public String solution(int[] numbers) {
List<String> ans = Arrays.stream(numbers)
.mapToObj(String::valueOf)
.collect(Collectors.toList());
ans.sort((s1, s2) -> (s2 + s1).compareTo(s1 + s2));
if (ans.get(0).equals("0")) {
return "0";
}
return String.join("", ans);
}
}
문자열을 합친 후 비교하는 방법을 사용했다.
import java.util.Arrays;
import java.util.Collections;
class Solution {
public int solution(int[] citations) {
Integer[] arr = Arrays.stream(citations).boxed().toArray(Integer[]::new);
Arrays.sort(arr, Collections.reverseOrder());
int cnt = 0;
for(int n : arr) {
if(n <= cnt) return cnt;
cnt++;
}
return cnt;
}
}
배열을 내림차순으로 정렬했다. (Collections.reverserOrder()을 사용하기 위해 int -> Integer로 변환)
cnt변수를 선언해 for문을 돌 때마다 +1해줬다.
내림차순으로 정렬했기 때문에 숫자는 점점 작아지고 cnt는 점점 커지는데 두 수를 비교해서 cnt가 같거나 커지게 되면 cnt를 return한다.
stream 사용법에 익숙해지려고 stream을 이용해 문제를 풀어봤다.
원래 IDE안쓰고 풀었었는데 좀 시간도 오래걸리는 것 같고 불편해서 고민중이다.. 🤔