[코딩테스트 고득점 Kit] 정렬

suebeen·2021년 9월 6일
0
post-thumbnail

문제 링크

K번째수

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);
   }
}

문자열을 합친 후 비교하는 방법을 사용했다.

H-Index

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안쓰고 풀었었는데 좀 시간도 오래걸리는 것 같고 불편해서 고민중이다.. 🤔

0개의 댓글

관련 채용 정보