[JAVA] 가장 길고 짧은 문자열 제외하기

문제: 가장 짧은 문자열과 가장 긴 문자열을 제거한 배열을 리턴

주의: 가장 짧은 문자열의 길이와 가장 긴 문자열의 길이는 같을 수 없다/ 길이가 가장 길거나 짧은 게 여러개라면 나중에 위치한 문자열을 제거

public class Main {
    public String[] removeExtremes(String[] arr) {

        if (arr.length == 0) return null;

        int shortestLen = 20;
        int longestLen = 0;

        int shortestIdx = 0;
        int longestIdx = 0;

        for (int i = 0; i < arr.length; i++) {
            if (arr[i].length() <= shortestLen) {
                shortestLen = arr[i].length();
                shortestIdx = i;
            }
            if (arr[i].length() >= longestLen) {
                longestLen = arr[i].length();
                longestIdx = i;
            }
        }
        String[] result = new String[arr.length - 2];
        int curIndex = 0;

        for (int i = 0; i < arr.length; i++) {
            if (i != shortestIdx && i != longestIdx) {
                result[curIndex] = arr[i];
                curIndex++;
            }
        }
        return result;
    }
}

흐름

1. 빈 배열일 때 null 리턴
2. 최단,최장 길이를 담을 변수와 최단, 최장의 인덱스를 담을 변수 선언
3. for (arr의 길이만큼 반복) {
     if (arr[i]의 길이가 최단길이보다 같거나 작다면)
        최단길이 변수에 arr[i]의 길이를 넣음
        최단길이 인덱스에 i를 넣음
     if (arr[i]의 길이가 최장길이보다 같거나 크다면)
        최장길이 변수에 arr[i]의 길이를 넣음
        최장길이 인덱스에 i를 넣음
   }
4. 결과 값을 받을 문자열 result선언. 최소,최대를 제외하고 받기 때문에 -2 해줌
5. 배열을 순회하며 result에 최장,최단을 제거한 나머지 문자열을 넣어줌