public String[] removeExtremes(String[] arr) {
// TODO:
// edgecase: 공백 처리
if (arr.length == 0) {
return null;
}
// 필요한 요소 선언
int longestIdx = 0;
int longestLen = arr[0].length();
int shortestIdx = 0;
int shortestLen = arr[0].length();
int cnt = 0;
String[] result = new String[arr.length - 2];
// 반복문으로 반복하면서
for (int i = 0; i < arr.length; i++) {
// 가장 짧거나 같을 경우 짧은 문자열에
if (arr[i].length() <= shortestLen) {
shortestIdx = i;
shortestLen = arr[i].length();
}
// 가장 길거나 같을 경우 긴 문자열에
if (arr[i].length() >= longestLen) {
longestIdx = i;
longestLen = arr[i].length();
}
}
// 짧은 문자열, 긴문자열을 제외한 요소를 새 배열에 담음
for (int i = 0; i < arr.length; i++) {
if (i != shortestIdx && i != longestIdx) {
result[cnt] = arr[i];
cnt++;
}
}
// 새 배열 리턴
return result;
}
이 코드는 주어진 문자열 배열에서 가장 긴 문자열과 가장 짧은 문자열을 제외한 나머지 문자열을 새 배열에 담아 반환하는 기능을 가지고 있습니다.
['where', 'is', 'the', 'longest', 'word']를 입력받았을 때, 아래와 같이 처리됩니다.
문자열 배열의 길이를 확인합니다.
이 배열의 길이는 5이므로, if 문을 건너뜁니다.
가장 긴 문자열과 가장 짧은 문자열을 찾습니다.
for 문을 이용하여 배열의 모든 요소를 탐색하면서,
현재까지 찾은 가장 짧은 문자열의 길이(shortestLen)보다 작거나 같은 문자열을 만나면, 그 문자열의 인덱스와 길이를 shortestIdx와 shortestLen에 저장합니다. 마찬가지로, 현재까지 찾은 가장 긴 문자열의 길이(longestLen)보다 긴 문자열을 만나면, 그 문자열의 인덱스와 길이를 longestIdx와 longestLen에 저장합니다.
1회전: i = 0, shortestIdx = 0, shortestLen = 5, longestIdx = 0, longestLen = 5
2회전: i = 1, shortestIdx = 1, shortestLen = 2, longestIdx = 0, longestLen = 5
3회전: i = 2, shortestIdx = 1, shortestLen = 2, longestIdx = 0, longestLen = 5
4회전: i = 3, shortestIdx = 1, shortestLen = 2, longestIdx = 3, longestLen = 7
5회전: i = 4, shortestIdx = 1, shortestLen = 2, longestIdx = 3, longestLen = 7
가장 긴 문자열과 가장 짧은 문자열을 제외한 나머지 문자열을 새 배열에 담습니다.
for 문을 이용하여 배열의 모든 요소를 탐색하면서,
shortestIdx나 longestIdx와 같은 인덱스를 가지는 문자열을 제외하고
나머지 문자열을 새 배열(result)에 담습니다.
1회전: i = 0, shortestIdx = 1, longestIdx = 3, result = ['is']
2회전: i = 1, shortestIdx = 1, longestIdx = 3, result = ['is', 'the']
3회전: i = 2, shortestIdx = 1, longestIdx = 3, result = ['is', 'the']
4회전: i = 3, shortestIdx = 1, longestIdx = 3, result = ['is', 'the']
5회전: i = 4, shortestIdx = 1, longestIdx = 3, result = ['is', 'the', 'word']
새 배열을 반환합니다. 최종적으로, ['is', 'the', 'word']가 반환됩니다.