removeExtremes

이용만·2023년 3월 22일
0

문제
문자열을 요소로 갖는 배열을 입력받아 가장 짧은 문자열과 가장 긴 문자열을 제거한 배열을 리턴해야 합니다.

주의 사항
가장 짧은 문자열의 길이와 가장 긴 문자열의 길이가 같은 경우는 없습니다.
가장 짧은 문자열 또는 가장 긴 문자열이 다수일 경우, 나중에 위치한 문자열을 제거합니다.
공백을 입력받을 경우, null을 반환합니다.

public class Solution { 
	public String[] removeExtremes(String[] arr) {
    // TODO:배열 내에 있는 가장 짧고 긴 배열의 요소를 삭제, 같은 숫자가 있을 경우 나중에 있는 것을 뺀다.

    //공백을 입력받는 경우
    if(arr.length == 0) return null;

    //최대 길이는 20, 최소 길이는 0으로 기본값을 설정
    //최단,최장 길이 변수와 최단, 최장의 인덱스를 담을 변수
    //{"a", "b", "c", "def"});
    int shortStr = 20; 
    int longStr = 0;

    int shortestIdx = 0;
    int longestIdx = 0;

    for(int i = 0; i<arr.length; i++){
      //해당 요소가 longStr보다 크면
      if(arr[i].length() >= longStr){ // 1 >= 0
        //longStr에 현재 문자열의 길이를 넣어주고, longestIdx에 현재 인덱스를 넣어준다.
        longStr = arr[i].length();
        longestIdx = i;
      }
      //같은 방식으로 최소 문자열과 인덱스를 찾아 대입한다.
      if(arr[i].length() <= shortStr){
        shortStr = arr[i].length();
        shortestIdx = i;
      }
    }
    //결과를 넣어줄 새로운 배열을 선언. 최소 문자여과 최대 문자열을 제외하기 때문에 -2만큼 배열을 선언한다.
    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;
	} 
}

알고리즘 쉽지 않다.. 갈수록 자존감은 낮아져간다.. 포기하지말자.. 계속 풀자..
의사코드를 계속 작성하면서 풀어나가보자. 아래는 내가 쓴 의사코드이다.
비교해보자.

짧은 문자를 지우기 위해 비교를 한다
같은 길이의 문자가 있는지 여부를 파악한다.
있으면 가장 나중에 있는 짧은 길이의 문자를 삭제한다.
없으면 해당 문자를 지운다.
큰 문자를 지운다.
같은 길이의 문자가 있는지 여부를 파악한다.
있으면 가장 나중에 있는 큰 길이의 문자를 삭제
없으면 해당 문자를 지운다

profile
성장하는 개발자가 되고자 합니다.

0개의 댓글