코딩 스터디

반복문을 곁들인 배열 요소 제거 문제

hunm719 2023. 1. 26. 21:19

오늘 스터디 시간에는

 

1.오늘 배운 웹 애플리케이션 내용 복습

2.내일 해볼 API 내용 예습

3.데일리 코딩 문제 틀린 부분 질문

을 진행했다.

 

 

복습한 내용은 부트캠프에 정리해두었으니, 여기에서는 틀린 코딩 문제를 복기해보자.

 

문제

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

입력

인자 1 : arr

  • String 타입을 요소로 갖는 배열
  • arr[i].length()는 20 이하

출력

  • 배열을 리턴해야 합니다.

주의 사항

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

입출력 예시

1
2
3
4
5
String[] output = removeExtremes(new String[]{"a""b""c""def"});
System.out.println(output); // --> ["a"', "b"]
 
output = removeExtremes(new String[]{"where""is""the""longest""word"});
System.out.println(output); // --> ["where", "the", "word"]
cs

문제 풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public class Solution { 
    public String[] removeExtremes(String[] arr) {
    // TODO:
        // 공백입력시 null
        if(arr.length == 0return null;
        // 가장 긴 문자열 longest 선언 초기값은 arr[0]
        String longest = arr[0];
        // 가장 짧은 문자열 shortest 선언 초기값은 arr[0]
        String shortest = arr[0];
        // 각각 문자열의 인덱스도 선언
        int longestIndex = 0;
        int shortestIndex = 0;
        // arr을 순회하면서
        for(int i = 1; i < arr.length; i++){
        // 각 요소의 길이를 비교
            // arr[i].length <= shortest.length 라면 shortest = arr[i]
            if(arr[i].length() <= shortest.length()) {
                shortest = arr[i];
                shortestIndex = i;}
            // arr[i].length >= longest.length 라면 longest = arr[i]
            else if(arr[i].length() >= longest.length()) {
                longest = arr[i];
                longestIndex = i;}
        }
        //arr에서 longest와 shortest를 제거
        List<String> result = new ArrayList<>(Arrays.asList(arr));
        result.remove(longestIndex);
        result.remove(shortestIndex);
        //arr리턴
    return result.toArray(new String[0]);
    } 
}
cs

반복문을 순회하면서

가장 긴 문자열 longest 와 longest의 인덱스 값을 넣어준 longestIndex,

가장 짧은 문자열 shortest와 shortest의 인덱스 값을 넣어준 shortestIndex를 저장했고,

arr을 리스트로 변환 후 remove메서드를 통해 longest와 shortest를 제거하고, 제거를 마친 리스트를 배열로 다시 변환하려고 했지만 7개의 테스트 중 5개만 통과하고 2개는 실패했다.

 

실패한 2가지

26번 줄 이후인 arr을 리스트로 변환 후 remove메서드를 통해 longest와 shortest를 제거하고, 제거를 마친 리스트를 배열로 다시 변환하는 과정에서 문제가 있는 것 같은데 관련하여 계속 찾아봤지만 해답을 찾지 못했다. 나를 가장 복잡하게 만든건 IndexOutOfBoundsException 오류가 나온것이다.

 

현재는 코드스테이츠 강사님께 질문을 드린 상태이고, 답변을 받아 해결하게되면 이 게시글 아래에 추가로 수정하겠다.

'코딩 스터디' 카테고리의 다른 글

Schema 구현 및 INNER JOIN과 OUTER JOIN  (0) 2023.02.01
요소 크기 비교 문제  (0) 2023.01.31
momo study(23.01.25)  (2) 2023.01.25
momo study(23.01.21)  (0) 2023.01.21
momo study(23.01.20)  (1) 2023.01.20